#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 11;
int n, tot = 1;
long long s, b[N];
struct ddd {
  long long v, c;
  bool operator<(const ddd &a) const { return c == a.c ? v > a.v : c < a.c; }
} a[N];
struct xxx {
  int l, r, id;
} dl[N];
long long read() {
  long long x = 0;
  char ch = getchar();
  while (ch > '9' || ch < '0') ch = getchar();
  while (ch >= '0' && ch <= '9') x = 10 * x + ch - 48, ch = getchar();
  return x;
}
long long get_x(long long y, int id) { return (y - b[id] - 1) / a[id].v + 1; }
long long get_b(int ps, int id) {
  long long x = get_x(a[ps].c, id);
  return b[id] + a[id].v * x - a[ps].c - a[ps].v * x;
}
int main() {
  cin >> n >> s;
  for (int i = 1; i <= n; i++) {
    a[i].v = read();
    a[i].c = read();
  }
  sort(a + 1, a + 1 + n);
  for (int i = 2; i <= n; i++) {
    if (a[i].c != a[tot].c && a[i].v > a[tot].v) a[++tot] = a[i];
  }
  int hd = 0, tl = 1;
  dl[1] = (xxx){2, tot, 1};
  for (int i = 2; i <= tot; i++) {
    xxx now = dl[hd + 1];
    if (dl[hd + 1].r == i) hd++;
    if (hd < tl) dl[hd + 1].l = max(dl[hd + 1].l, i + 1);
    b[i] = get_b(i, now.id);
    while (hd < tl && get_b(dl[tl].l, i) > get_b(dl[tl].l, dl[tl].id)) tl--;
    if (hd == tl)
      dl[++tl] = (xxx){i + 1, tot, i};
    else {
      now = dl[tl];
      int l = now.l, r = now.r, res = -1;
      while (l <= r) {
        int mid = l + r >> 1;
        if (get_b(mid, i) <= get_b(mid, now.id)) {
          l = mid + 1;
          res = mid;
        } else
          r = mid - 1;
      }
      dl[tl].r = res;
      if (res + 1 <= tot) dl[++tl] = (xxx){res + 1, tot, i};
    }
  }
  long long ans = 1e18;
  for (int i = 1; i <= tot; i++) {
    ans = min(ans, get_x(s, i));
  }
  cout << ans << endl;
  return 0;
}
