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;
long long a, b, c, d, e, f, g, h, i, j, k;
pair<long long, long long> H[300005];
long long F[300005], G[300005];
long long tar, last, an;
long long que[300005], l, r;
bool cmp(pair<long long, long long> x, pair<long long, long long> y) {
  return x.second < y.second;
}
long long Div(long long x, long long y) { return x / y + (x % y != 0); }
pair<long long, long long> Make(long long x, long long y) {
  pair<long long, long long> R;
  R.first = F[x] + Div(max(y - G[x], 0LL), H[x].first);
  R.second = G[x] + H[x].first * (R.first - F[x]) - y;
  return R;
}
long long Find(long long x, long long y) {
  long long low, high, mid;
  long long R = 10000000000000009LL;
  low = 0LL;
  high = 10000000000000009LL;
  while (low <= high) {
    mid = (low + high) >> 1;
    pair<long long, long long> t1 = Make(x, mid), t2 = Make(y, mid);
    if (t2.first < t1.first ||
        (t2.first == t1.first && t2.second > t1.second)) {
      R = min(R, mid);
      high = mid - 1;
    } else
      low = mid + 1;
  }
  return R;
}
int main() {
  cin >> a >> tar;
  for (i = 1; i <= a; i++) cin >> H[i].first >> H[i].second;
  sort(H + 1, H + a + 1, cmp);
  l = 1;
  que[++r] = 1;
  F[1] = G[1] = 0;
  last = H[1].first;
  an = Div(tar, H[1].first);
  for (i = 2; i <= a; i++) {
    if (H[i].first <= last) continue;
    while (l < r) {
      pair<long long, long long> t1 = Make(que[l], H[i].second),
                                 t2 = Make(que[l + 1], H[i].second);
      if (t2.first < t1.first ||
          (t2.first == t1.first && t2.second >= t1.second))
        l++;
      else
        break;
    }
    pair<long long, long long> tt = Make(que[l], H[i].second);
    F[i] = tt.first;
    G[i] = tt.second;
    while (r > l) {
      long long yy = Find(que[r - 1], que[r]);
      pair<long long, long long> t1 = Make(i, yy), t2 = Make(que[r], yy);
      if (t1.first < t2.first ||
          (t1.first == t2.first && t1.second >= t2.second))
        r--;
      else
        break;
    }
    que[++r] = i;
    last = H[i].first;
    an = min(an, F[i] + Div(max(tar - G[i], 0LL), H[i].first));
  }
  cout << an << endl;
  return 0;
}
