#include <bits/stdc++.h>
using namespace std;
pair<long long, long long> A[201000];
long long f[201000], g[201000];
double F[201000];
pair<long long, long long> calc(int x, int y) {
  long long a = (A[x].first - g[y] - 1) / A[y].second + 1;
  long long b = 1ll * A[y].second * a - (A[x].first - g[y]);
  return pair<long long, long long>(a + f[y], -b);
}
double Ca(int x, int y) {
  return (F[y] - F[x]) / (1.0 / A[x].second - 1.0 / A[y].second);
}
int B[201000];
int main() {
  int n;
  long long S;
  scanf("%d%I64d", &n, &S);
  long long ans = S;
  for (int i = 1; i <= n; i++) scanf("%I64d%I64d", &A[i].second, &A[i].first);
  sort(A + 1, A + n + 1);
  long long mx = 0;
  int st = 0;
  int en = 0;
  int xx = 0;
  for (int i = 1; i <= n; i++) {
    if (A[i].second <= mx) continue;
    mx = max(mx, A[i].second);
    if (i == 1) {
      f[1] = 0;
      g[1] = 0;
    } else {
      while (en - 1 > st) {
        if (Ca(B[st], B[st + 1]) < A[i].first)
          st++;
        else
          break;
      }
      while (en - 1 > st) {
        if (calc(i, B[st]) > calc(i, B[st + 1]))
          st++;
        else
          break;
      }
      pair<long long, long long> a = calc(i, B[st]);
      f[i] = a.first;
      g[i] = -a.second;
    }
    long long p = f[i] + (S - g[i] - 1) / A[i].second + 1;
    if (ans > p) ans = p, xx = i;
    F[i] = 1.0 * f[i] - 1.0 * g[i] / A[i].second;
    while (en - 1 > st) {
      if (Ca(B[en - 2], B[en - 1]) > Ca(B[en - 1], i))
        en--;
      else
        break;
    }
    B[en++] = i;
  }
  printf("%I64d\n", ans);
  return 0;
}
