#include <bits/stdc++.h>
inline long long read() {
  long long x = 0;
  char c = getchar(), f = 1;
  for (; c < '0' || '9' < c; c = getchar())
    if (c == '-') f = -1;
  for (; '0' <= c && c <= '9'; c = getchar()) x = x * 10 + c - '0';
  return x * f;
}
inline void write(long long x) {
  static char buf[20];
  if (x < 0) x = -x, putchar('-');
  int len = 0;
  for (; x; x /= 10) buf[len++] = x % 10 + '0';
  if (!len)
    putchar('0');
  else
    while (len) putchar(buf[--len]);
}
inline void writesp(long long x) {
  write(x);
  putchar(' ');
}
inline void writeln(long long x) {
  write(x);
  putchar('\n');
}
struct Data {
  int v, c;
  friend bool operator<(Data a, Data b) {
    return a.v != b.v ? a.v < b.v : a.c < b.c;
  }
} a[200010];
struct Line {
  long long k, b;
} st[200010];
int mark[200010];
long long f[200010];
int n, tp;
long long s;
double cross(Line a, Line b) { return (double)(b.b - a.b) / (a.k - b.k); }
int main() {
  n = read();
  s = read();
  for (int i = 1; i <= n; i++) a[i].v = read(), a[i].c = read();
  std::sort(a + 1, a + n + 1);
  tp = 1;
  st[1] = {0, 0};
  for (int i = 1; i <= n; i++) {
    if ((i > 1 && a[i].v == a[i - 1].v) || (!st[tp].k && a[i].c)) {
      mark[i] = 0;
      continue;
    }
    mark[i] = 1;
    int l = 1, r = tp;
    while (l < r) {
      int mid = (l + r) >> 1;
      if (st[mid].k * cross(st[mid], st[mid + 1]) + st[mid].b < a[i].c)
        l = mid + 1;
      else
        r = mid;
    }
    if (!st[l].k && !a[i].c)
      f[i] = 0;
    else {
      long long x =
          (a[i].c - st[l].b) / st[l].k + ((a[i].c - st[l].b) % st[l].k > 0);
      l = 1;
      r = tp;
      while (l < r) {
        int mid = (l + r) >> 1;
        if (cross(st[mid], st[mid + 1]) < x)
          l = mid + 1;
        else
          r = mid;
      }
      long long y = x * st[l].k + st[l].b;
      f[i] = (y - a[i].c) - a[i].v * x;
    }
    Line cur = (Line){a[i].v, f[i]};
    while (tp > 1 && cross(cur, st[tp - 1]) < cross(st[tp], st[tp - 1])) --tp;
    st[++tp] = cur;
  }
  long long ans = 1ll << 60;
  for (int i = 1; i <= n; i++)
    if (mark[i])
      ans = std::min(ans, (s - f[i]) / a[i].v + ((s - f[i]) % a[i].v > 0));
  writeln(ans);
  return 0;
}
