Kostya is playing the computer game Cookie Clicker. The goal of this game is to gather cookies. You can get cookies using different buildings: you can just click a special field on the screen and get the cookies for the clicks, you can buy a cookie factory, an alchemy lab, a time machine and it all will bring lots and lots of cookies.

At the beginning of the game (time 0), Kostya has 0 cookies and no buildings. He has n available buildings to choose from: the i-th building is worth ci cookies and when it's built it brings vi cookies at the end of each second. Also, to make the game more interesting to play, Kostya decided to add a limit: at each moment of time, he can use only one building. Of course, he can change the active building each second at his discretion.

It's important that Kostya is playing a version of the game where he can buy new buildings and change active building only at time moments that are multiples of one second. Kostya can buy new building and use it at the same time. If Kostya starts to use a building at the time moment t, he can get the first profit from it only at the time moment t + 1.

Kostya wants to earn at least s cookies as quickly as possible. Determine the number of seconds he needs to do that.

Input

The first line contains two integers n and s (1 ≤ n ≤ 2·105, 1 ≤ s ≤ 1016) — the number of buildings in the game and the number of cookies Kostya wants to earn.

Each of the next n lines contains two integers vi and ci (1 ≤ vi ≤ 108, 0 ≤ ci ≤ 108) — the number of cookies the i-th building brings per second and the building's price.

Output

Output the only integer — the minimum number of seconds Kostya needs to earn at least s cookies. It is guaranteed that he can do it.

Examples

Input

3 9
1 0
2 3
5 4


Output

6


Input

3 6
1 0
2 2
5 4


Output

5


Input

3 13
1 0
2 2
6 5


Output

7


Input

1 10000000000000000
1 0


Output

10000000000000000
#include <bits/stdc++.h>
using namespace std;
const int MaxN = 200000;
template <class T>
inline void tension(T &a, const T &b) {
  if (b < a) a = b;
}
template <class T>
inline void relax(T &a, const T &b) {
  if (b > a) a = b;
}
int main() {
  int n;
  long long s;
  pair<int, int> a[MaxN];
  cin >> n >> s;
  for (int i = 0; i < n; i++) scanf("%d %d", &a[i].first, &a[i].second);
  sort(a, a + n);
  int tn = 0;
  int p = n - 1;
  while (a[p].second != 0) p--;
  for (int i = p, j = p; i < n; i = j) {
    while (j < n && a[i].first == a[j].first) j++;
    a[tn++] = a[i];
  }
  n = tn;
  int nS = 0;
  static long long sX[MaxN], sY[MaxN];
  static long long sK[MaxN], sB[MaxN];
  sX[nS] = 0, sY[nS] = 0, sK[nS] = a[0].first, sB[nS] = 0;
  nS++;
  for (int i = 1; i < n; i++) {
    p = upper_bound(sY, sY + nS, a[i].second) - sY - 1;
    long long stX = (a[i].second - sB[p] + sK[p] - 1) / sK[p];
    if (p + 1 < nS) tension(stX, sX[p + 1]);
    long long stY = sK[p] * stX + sB[p];
    if (p + 1 < nS && stX == sX[p + 1]) relax(stY, sY[p + 1]);
    stY -= a[i].second;
    long long curK = a[i].first, curB = stY - curK * stX;
    while (sK[nS - 1] * sX[nS - 1] + sB[nS - 1] < curK * sX[nS - 1] + curB)
      nS--;
    sX[nS] = (sB[nS - 1] - curB) / (curK - sK[nS - 1]) + 1,
    sY[nS] = curK * sX[nS] + curB, sK[nS] = curK, sB[nS] = curB;
    nS++;
  }
  p = upper_bound(sY, sY + nS, s) - sY - 1;
  long long res = (s - sB[p] + sK[p] - 1) / sK[p];
  if (p + 1 < nS) tension(res, sX[p + 1]);
  cout << res << endl;
  return 0;
}
