#include <bits/stdc++.h>
using namespace std;
const long long MAXN = 2e5 + 10;
const long long INF = 1e18 + 10;
vector<pair<long long, long long> > d;
pair<long long, long long> a[MAXN];
pair<long long, long long> dp[MAXN];
pair<long long, long long> intersection(long long id, long long x) {
  return make_pair(((x + dp[id].second) / a[id].first) +
                       ((x + dp[id].second) % a[id].first != 0) + dp[id].first,
                   -((((x + dp[id].second) / a[id].first) +
                      ((x + dp[id].second) % a[id].first != 0)) *
                         a[id].first -
                     dp[id].second - x));
}
long long f(long long x, long long y) {
  long long l = 0, r = INF;
  while (r - l > 1) {
    long long mid = (r + l) / 2;
    if (intersection(x, mid) < intersection(y, mid)) {
      l = mid;
    } else {
      r = mid;
    }
  }
  return r;
}
int main() {
  ios_base ::sync_with_stdio(false);
  cin.tie(0);
  long long n, s, res = INF;
  cin >> n >> s;
  for (long long i = 1; i <= n; i++) {
    cin >> a[i].first >> a[i].second;
  }
  sort(a + 1, a + n + 1);
  for (long long i = 1; i <= n; i++) {
    if (d.empty()) {
      if (a[i].second == 0) {
        dp[i] = make_pair(0, 0);
      } else {
        dp[i] = make_pair(INF, INF);
      }
    } else {
      long long z =
          d[upper_bound(d.begin(), d.end(), make_pair(a[i].second, INF)) -
            d.begin() - 1]
              .second;
      dp[i] = intersection(z, a[i].second);
    }
    while (!d.empty() && f(d.back().second, i) <= d.back().first) {
      d.pop_back();
    }
    if (d.empty()) {
      if (a[i].second == 0) {
        d.push_back(make_pair(0, i));
      }
    } else {
      d.push_back(make_pair(f(d.back().second, i), i));
    }
  }
  for (long long i = 1; i <= n; i++) {
    if (dp[i] != make_pair(INF, INF)) {
      res = min(res, intersection(i, s).first);
    }
  }
  cout << res;
}
