#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
int n;
long long S, k[N], b[N];
struct factory {
  int speed, cost;
} a[N];
bool cmpFactory(const factory &u, const factory &v) {
  return u.cost == v.cost ? u.speed > v.speed : u.cost < v.cost;
}
struct node {
  int l, r, p;
  node(int tl = 0, int tr = 0, int tp = 0) { l = tl, r = tr, p = tp; }
} que[N];
void reGetFactory() {
  static int stk[N], top;
  sort(a + 1, a + n + 1, cmpFactory);
  for (int i = 1; i <= n; ++i) {
    if (a[i].cost >= S) break;
    if (a[i].speed > a[stk[top]].speed) {
      stk[++top] = i;
    }
  }
  n = top;
  for (int i = 1; i <= n; ++i) a[i] = a[stk[i]];
}
long long calc(int i, long long y) { return (y - b[i] - 1) / k[i] + 1; }
long long cal(int p, int i) {
  return (k[p] - k[i]) * calc(p, a[i].cost) + b[p] - a[i].cost;
}
int main() {
  scanf("%d %lld", &n, &S);
  for (int i = 1; i <= n; ++i) scanf("%d %d", &a[i].speed, &a[i].cost);
  reGetFactory();
  assert(a[1].cost == 0);
  k[1] = a[1].speed, b[1] = a[1].cost;
  int hd = 1, tl = 0;
  que[++tl] = node(1, n, 1);
  long long ans = (S - b[1] - 1) / k[1] + 1;
  for (int i = 1; i <= n; ++i) k[i] = a[i].speed;
  for (int i = 2, p; i <= n; ++i) {
    while (que[hd].r < i) ++hd;
    b[i] = cal(que[hd].p, i);
    ans = min(ans, (S - b[i] - 1) / k[i] + 1);
    int l = n + 1, r = n;
    while (hd <= tl && que[tl].l > i &&
           cal(i, que[tl].l) > cal(que[tl].p, que[tl].l))
      l = que[tl--].l;
    p = que[tl].p;
    int lp = max(i + 1, que[tl].l), rp = que[tl].r, tp;
    while (lp <= rp) {
      tp = (lp + rp) >> 1;
      if (cal(i, tp) > cal(p, tp)) {
        if (tp < l) l = tp;
        rp = tp - 1;
      } else {
        lp = tp + 1;
      }
    }
    if (l <= r) {
      que[tl].r = l - 1;
      que[++tl] = node(l, r, i);
    }
  }
  printf("%lld\n", ans);
  return 0;
}
