#include <bits/stdc++.h>
using namespace std;
template <typename T>
void Read(T &cn) {
  char c;
  int sig = 1;
  while (!isdigit(c = getchar()))
    if (c == '-') sig = -1;
  cn = c - 48;
  while (isdigit(c = getchar())) cn = cn * 10 + c - 48;
  cn *= sig;
}
template <typename T>
void Write(T cn) {
  if (cn < 0) {
    putchar('-');
    cn = 0 - cn;
  }
  int wei = 0;
  T cm = 0;
  int cx = cn % 10;
  cn /= 10;
  while (cn) wei++, cm = cm * 10 + cn % 10, cn /= 10;
  while (wei--) putchar(cm % 10 + 48), cm /= 10;
  putchar(cx + 48);
}
template <typename T>
void Max(T &cn, T cm) {
  cn = cn < cm ? cm : cn;
}
template <typename T>
void Min(T &cn, T cm) {
  cn = cn < cm ? cn : cm;
}
struct qwe {
  long long v, c;
  void getit() {
    Read(v);
    Read(c);
  }
  inline friend bool operator<(qwe a, qwe b) {
    return a.v == b.v ? a.c > b.c : a.v < b.v;
  }
};
struct xian {
  long long k, b;
  long long suan(long long cn) { return (cn - b + k - 1) / k; }
  void mk(long long cn, long long cm) {
    k = cn;
    b = cm;
  }
};
qwe a[200100 + 1];
int n;
long long m;
int xu[200100 + 1], xlen;
long long f[200100 + 1], g[200100 + 1];
xian zhan[200100 + 1];
int l, r;
int jiao_z(long long cn, xian A, xian B) {
  return cn * (A.k - B.k) <= (B.b - A.b);
}
int jiao(xian A, xian B, xian C) {
  double db1 = (B.b - A.b), db2 = (C.b - B.b);
  double dk1 = (A.k - B.k), dk2 = (B.k - C.k);
  return db1 * dk2 >= db2 * dk1;
}
long long qiu(int cn, int cm) {
  while (l < r && jiao_z(zhan[l].suan(cn), zhan[l], zhan[l + 1])) l++;
  if (l > r) return -10000000000000000;
  return -zhan[l].suan(cn) * (cm - zhan[l].k) - cn + zhan[l].b;
}
void zeng(int ck, long long cb) {
  xian lin;
  lin.mk(ck, cb);
  while (l < r && jiao(zhan[r - 1], zhan[r], lin)) r--;
  zhan[++r] = lin;
}
int main() {
  Read(n);
  Read(m);
  for (int i = 1; i <= n; i++) a[i].getit();
  sort(a + 1, a + n + 1);
  xlen = 0;
  for (int i = 1; i <= n; i++) {
    if (a[i].v <= 0) continue;
    while (xlen && a[xu[xlen]].c > a[i].c) xlen--;
    xu[++xlen] = i;
  }
  for (int i = 1; i <= xlen; i++) a[i] = a[xu[i]];
  n = xlen;
  f[0] = 0;
  a[0].v = a[0].c = 0;
  l = 1;
  r = 0;
  f[1] = 0;
  zeng(a[1].v, f[1]);
  long long ans = (m + a[1].v - 1) / a[1].v;
  for (int i = 2; i <= n; i++) {
    f[i] = qiu(a[i].c, a[i].v);
    zeng(a[i].v, f[i]);
    Min(ans, (m - f[i] + a[i].v - 1) / a[i].v);
  }
  Write(ans);
  puts("");
  return 0;
}
