#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1);
void read(long long& x) {
  x = 0;
  long long f = 1;
  char ch = getchar();
  while ((ch < '0' || ch > '9') && ch != '-') ch = getchar();
  if (ch == '-') f = -1, ch = getchar();
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  x *= f;
}
struct Node {
  long long x, y;
  Node() {}
  Node(long long x, long long y) : x(x), y(y) {}
  bool operator<(const Node& p) const {
    return y < p.y || (y == p.y && x > p.x);
  }
} num[200005];
struct Line {
  long long k, b;
  Line() {}
  Line(long long k, long long b) : k(k), b(b) {}
} line[200005];
long long n;
long long S, ans;
long long f(Line l, long long y) { return (y - l.b + l.k - 1) / l.k; }
Line work(Line l, Node p) {
  long long x = f(l, p.y);
  return Line(p.x, x * l.k + l.b - p.y - p.x * x);
}
bool check(Line l3, Line l2, Line l1) {
  assert(l3.k > l1.k);
  assert(l2.k > l1.k);
  return (l1.b - l3.b) * (l2.k - l1.k) <= (l1.b - l2.b) * (l3.k - l1.k);
}
bool cmp(Line l1, Line l2, long long y) {
  long long f1 = f(l1, y), f2 = f(l2, y);
  if (f1 != f2) {
    return f1 > f2;
  }
  return (l2.k * f2 + l2.b >= l1.k * f1 + l1.b);
}
long long que[200005];
int main() {
  read(n);
  scanf("%lld", &S);
  for (long long i = (1); i <= (n); i++) read(num[i].x), read(num[i].y);
  sort(num + 1, num + n + 1);
  assert(num[1].y == 0);
  line[1] = Line(num[1].x, 0);
  ans = f(line[1], S);
  long long head = 1, tail = 1, x = num[1].x;
  que[1] = 1;
  for (long long i = (2); i <= (n); i++) {
    if (num[i].x <= x) continue;
    x = num[i].x;
    while ((head < tail) && cmp(line[que[head]], line[que[head + 1]], num[i].y))
      head++;
    line[i] = work(line[que[head]], num[i]);
    while ((head < tail) &&
           check(line[i], line[que[tail]], line[que[tail - 1]]))
      tail--;
    que[++tail] = i;
    ans = min(ans, f(line[i], S));
  }
  printf("%lld\n", ans);
  return 0;
}
