#include <bits/stdc++.h>
using namespace std;
const int N = 200000 + 10;
int n;
long long s;
pair<long long, long long> d[N];
int t;
long long dx[N], dy[N], dk[N];
inline double Cross(int a, int b) {
  return (double)(dk[b] * dx[b] - dk[a] * dx[a] + dy[a] - dy[b]) /
         (dk[b] - dk[a]);
}
inline void Get(long long date, long long& x, long long& y) {
  if (!date) return (void)(x = y = 0);
  int l(0), r(t), mid;
  while (l + 1 < r) {
    mid = (l + r) >> 1;
    long long tx, ty;
    tx = (mid == t) ? 100000000LL : (long long)Cross(mid, mid + 1);
    ty = dk[mid] * (tx - dx[mid]) + dy[mid];
    if (ty >= date)
      r = mid;
    else
      l = mid;
  }
  x = (date - dy[r] + dk[r] - 1) / dk[r] + dx[r];
  y = dk[r] * (x - dx[r]) + dy[r];
}
inline void Add(long long x, long long y, long long k) {
  ++t, dx[t] = x, dy[t] = y, dk[t] = k;
  while (t > 2 && Cross(t - 1, t) <= Cross(t - 2, t - 1))
    dx[t - 1] = dx[t], dy[t - 1] = dy[t], dk[t - 1] = dk[t], --t;
}
int main() {
  scanf("%d %I64d", &n, &s);
  for (int i(1); i <= (n); ++i)
    scanf("%I64d %I64d ", &d[i].first, &d[i].second);
  sort(d + 1, d + n + 1);
  for (int start(n); start >= (1); --start)
    if (!d[start].second) {
      int m(0);
      for (int i(start); i <= (n); ++i)
        if (i == start || d[i].first > d[m].first) {
          while (m && d[m].second > d[i].second) --m;
          d[++m] = d[i];
        }
      n = m;
    }
  for (int i(1); i <= (n); ++i) {
    long long x, y;
    Get(d[i].second, x, y);
    Add(x, y - d[i].second, d[i].first);
  }
  long long x, y;
  Get(s, x, y);
  printf("%I64d\n", x);
  return 0;
}
