#include <bits/stdc++.h>
using namespace std;
int n, E[200010];
long long S;
struct node {
  int s, c;
  bool operator<(const node &ano) const {
    return c != ano.c ? c < ano.c : s > ano.s;
  }
} A[200010];
int X[200010], K[200010], Y[200010];
int qe[200010];
long long G(long long y, int i) {
  if (y < Y[i]) return 0x3f3f3f3f3f3f3f3fll;
  return X[i] + (y - Y[i]) / K[i] + ((y - Y[i]) % K[i] > 0);
}
int rest(int y, int i) {
  if (y < Y[i]) return 0;
  return (y - Y[i]) % K[i] ? K[i] - (y - Y[i]) % K[i] : 0;
}
double calc(int i, int j) {
  return ((double)Y[j] - Y[i] + (double)K[i] * X[i] - (double)K[j] * X[j]) /
         (K[i] - K[j]);
}
int better(int y, int i, int j) {
  if (G(y, i) != G(y, j)) return G(y, i) < G(y, j);
  return rest(y, i) > rest(y, j);
}
int main() {
  while (scanf("%d%I64d", &n, &S) == 2) {
    memset(E, 0, sizeof(E));
    for (int i = 1; i <= n; ++i) {
      scanf("%d%d", &A[i].s, &A[i].c);
    }
    sort(A + 1, A + n + 1);
    int Max = 0;
    for (int i = 1; i <= n; ++i) {
      if ((i != 1 && A[i].c == A[i - 1].c) || A[i].s <= Max) E[i] = 1;
      Max = max(Max, A[i].s);
    }
    int t = 0;
    for (int i = 1; i <= n; ++i)
      if (!E[i]) A[++t] = A[i];
    n = t;
    int first = 1, last = 1;
    qe[1] = 1;
    X[1] = 0, K[1] = A[1].s;
    long long ans = G(S, 1);
    for (int i = 2; i <= n; ++i) {
      int y = A[i].c;
      for (; first < last && better(y, qe[first + 1], qe[first]);) ++first;
      int j = qe[first];
      X[i] = G(y, j), Y[i] = rest(y, j);
      K[i] = A[i].s;
      ans = min(ans, G(S, i));
      for (; first < last && calc(qe[last], i) <= calc(qe[last - 1], qe[last]);)
        --last;
      qe[++last] = i;
    }
    printf("%I64d\n", ans);
  }
  return 0;
}
