#include <bits/stdc++.h>
using namespace std;
struct data {
  long long v, b;
} a[250001], b[250001];
int i, j, k, n, q[250001], l, r;
long long m, t, t1, t2;
bool cmp(data a, data b) { return a.v < b.v || a.v == b.v && a.b > b.b; }
long long ix(int x, int y) {
  return ceil((long double)(b[y].b - b[x].b) / (b[x].v - b[y].v));
}
int main() {
  scanf("%d%I64d", &n, &m);
  for (i = 1; i <= n; i++) scanf("%I64d%I64d", &a[i].v, &a[i].b);
  sort(a + 1, a + 1 + n, cmp);
  for (i = 1, r = 0; i <= n; i++) {
    for (; r && a[q[r]].b >= a[i].b; r--)
      ;
    q[++r] = i;
  }
  for (i = 1, n = r; i <= n; i++) a[i] = a[q[i]];
  for (; a[n].b >= m; n--)
    ;
  l = r = q[1] = 1;
  b[1].v = a[1].v;
  b[1].b = 0;
  for (i = 2; i <= n; i++) {
    for (; l < r; l++) {
      t1 = ceil((long double)(a[i].b - b[q[l]].b) / b[q[l]].v);
      t2 = ceil((long double)(a[i].b - b[q[l + 1]].b) / b[q[l + 1]].v);
      if (t1 < t2 || t1 == t2 && b[q[l]].v * t1 + b[q[l]].b >
                                     b[q[l + 1]].v * t2 + b[q[l + 1]].b)
        break;
    }
    t = ceil((long double)(a[i].b - b[q[l]].b) / b[q[l]].v);
    b[i].v = a[i].v;
    b[i].b = -a[i].v * t + t * b[q[l]].v + b[q[l]].b - a[i].b;
    for (; l < r && ix(q[r - 1], q[r]) >= ix(q[r], i); r--)
      ;
    q[++r] = i;
  }
  for (; l < r; l++) {
    t1 = ceil((long double)(m - b[q[l]].b) / b[q[l]].v);
    t2 = ceil((long double)(m - b[q[l + 1]].b) / b[q[l + 1]].v);
    if (t1 < t2 || t1 == t2 && b[q[l]].v * t1 + b[q[l]].b >
                                   b[q[l + 1]].v * t2 + b[q[l + 1]].b)
      break;
  }
  t = ceil((long double)(m - b[q[l]].b) / b[q[l]].v);
  printf("%I64d\n", t);
  return 0;
}
