#include <bits/stdc++.h>
using namespace std;
using ll = long long;
struct Line {
  ll k;
  ll b;
};
long double y(Line l, long double x) { return l.k * x + l.b; }
long double x(Line l, long double y) { return (long double)(y - l.b) / l.k; }
long double cross(Line l1, Line l2) {
  return (long double)(l2.b - l1.b) / (l1.k - l2.k);
}
int find_line(vector<Line>& lines, ll val) {
  int r = (int)(lines).size() - 1;
  int l = -1;
  while (r - l > 1) {
    int m = (l + r) / 2;
    long double c = floor(cross(lines[m], lines[m + 1]));
    if (y(lines[m], c) >= val) {
      r = m;
    } else {
      l = m;
    }
  }
  return r;
}
void insert(vector<Line>& lines, Line new_line) {
  while ((int)(lines).size() > 1 &&
         cross(new_line, lines[(int)(lines).size() - 2]) >=
             cross(new_line, lines.back())) {
    lines.pop_back();
  }
  lines.push_back(new_line);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  int n;
  ll s;
  cin >> n >> s;
  vector<pair<int, int>> a(n);
  for (int i = 0; i < n; ++i) {
    cin >> a[i].first >> a[i].second;
  }
  sort(begin(a), end(a));
  {
    vector<pair<int, int>> na;
    for (int i = 0; i < n; ++i) {
      if (!na.empty() && na.back().first == a[i].first) continue;
      while (!na.empty() && a[i].second <= na.back().second) {
        na.pop_back();
      }
      na.push_back(a[i]);
    }
    a = na;
    n = (int)(a).size();
  }
  vector<Line> lines{{a[0].first, 0}};
  for (int i = 1; i < n; ++i) {
    int j = find_line(lines, a[i].second);
    ll t = ceil(x(lines[j], a[i].second));
    ll start_money = y(lines[j], t) - a[i].second;
    Line new_line{a[i].first, start_money - a[i].first * t};
    insert(lines, new_line);
  }
  int i = find_line(lines, s);
  ll t = ceil(x(lines[i], s));
  cout << t;
  return 0;
}
