#include <bits/stdc++.h>
using namespace std;
inline long long in() {
  int32_t x;
  scanf("%d", &x);
  return x;
}
inline long long lin() {
  long long x;
  scanf("%lld", &x);
  return x;
}
char ch[4000010];
inline string get() {
  scanf("%s", ch);
  return string(ch);
}
inline void read(long long *a, long long n) {
  for (long long i = 0; i < n; i++) a[i] = in();
}
template <class blank>
inline void out(blank x) {
  cout << x << "\n";
  exit(0);
}
template <class blank>
inline void smin(blank &a, blank b) {
  a = min(a, b);
}
template <class blank>
inline void smax(blank &a, blank b) {
  a = max(a, b);
}
const long long maxn = 2e5 + 10;
const long long maxm = 2e6 + 10;
const long long maxlg = 61;
const long long base = 29;
const long long mod = 1e9 + 7;
const long long inf = 2e18 + 10;
struct line {
  long long m, b;
  line(long long m, long long b) : m(m), b(b) {}
  line() {}
} a[maxn];
struct event {
  long long tm;
  line ln;
  event(long long TM, line A) {
    tm = TM;
    ln = A;
  }
  event() {}
  inline bool operator<(const event &b) const { return tm < b.tm; }
};
vector<event> events;
inline long long f(line a, long long tm) { return tm * a.m + a.b; }
inline long long hit(line a, line b) {
  if (a.m <= b.m) {
    if (a.b > b.b && a.m == b.m) return 0;
    return inf;
  }
  long long tm = (b.b - a.b) / (a.m - b.m);
  if (f(a, tm) < f(b, tm)) tm++;
  return tm;
}
inline long long get(long long tm) {
  long long pos =
      upper_bound(events.begin(), events.end(), event(tm, {inf, inf})) -
      events.begin();
  pos--;
  return f(events[pos].ln, tm);
}
inline void add(long long m, long long b) {
  if (events.size() <= 1) {
    if (events.size() == 0)
      events.push_back({-inf, {m, b}});
    else {
      long long when = hit({m, b}, events.back().ln);
      if (when < inf) events.push_back({when, {m, b}});
    }
  } else {
    while (events.size() >= 2 &&
           hit(line(m, b), events.back().ln) < events.back().tm)
      events.pop_back();
    long long when = hit({m, b}, events.back().ln);
    if (when < inf) events.push_back({when, {m, b}});
  }
}
int32_t main() {
  long long n = in(), s = lin();
  for (long long i = 0; i < n; i++) a[i].m = in(), a[i].b = in();
  a[n] = {inf, s};
  sort(a, a + n + 1, [](const line &a, const line &b) {
    return make_pair(a.b, -a.m) < make_pair(b.b, -b.m);
  });
  add(a[0].m, 0);
  if (a[0].m >= s) return cout << 1 << "\n", 0;
  for (long long i = 1; i < n + 1; i++) {
    long long low = 0, hi = 1;
    while (get(hi) < a[i].b) hi *= 2;
    low = hi >> 1;
    while (low + 1 < hi) {
      long long mid = (low + hi) >> 1;
      if (get(mid) < a[i].b)
        low = mid;
      else
        hi = mid;
    }
    if (a[i].b == s) return cout << hi << "\n", 0;
    add(a[i].m, get(hi) - a[i].b - hi * a[i].m);
  }
}
