#include <bits/stdc++.h>
using namespace std;
struct Droite {
  long long origine, coef;
};
struct point {
  long long vitesse, prix;
};
bool compV(point a, point b) {
  return a.vitesse < b.vitesse || (a.vitesse == b.vitesse && a.prix < b.prix);
}
deque<Droite> hull;
void ajouter(Droite nouvelle) {
  hull.push_back(nouvelle);
  long long t = hull.size();
  while (hull.size() > 2 && (hull[t - 2].origine - hull[t - 3].origine) /
                                    (hull[t - 3].coef - hull[t - 2].coef) >=
                                (hull[t - 1].origine - hull[t - 2].origine) /
                                    (hull[t - 2].coef - hull[t - 1].coef)) {
    Droite ta = hull[t - 1];
    hull.pop_back();
    hull.pop_back();
    hull.push_back(ta);
    t--;
  }
}
pair<long long, long long> trouver(long long valeur) {
  long long gauche = 0;
  long long droite = hull.size() - 1;
  while (gauche < droite) {
    long long milieu = (gauche + droite) / 2;
    double xDeb = 0;
    double xFin = 1e18;
    if (milieu > 0) {
      xDeb = ((double)(hull[milieu - 1].origine - hull[milieu].origine) /
              (hull[milieu].coef - hull[milieu - 1].coef));
    }
    if (milieu < (long long)hull.size() - 1) {
      xFin = ((double)(hull[milieu].origine - hull[milieu + 1].origine) /
              (hull[milieu + 1].coef - hull[milieu].coef));
      if ((hull[milieu].origine - hull[milieu + 1].origine) *
              (hull[milieu + 1].coef - hull[milieu].coef) ==
          (hull[milieu + 1].coef - hull[milieu].coef) * xFin)
        xFin--;
    }
    if (hull[milieu].origine + hull[milieu].coef * xDeb > valeur) {
      droite = milieu - 1;
    } else if (hull[milieu].origine + hull[milieu].coef * xFin < valeur) {
      gauche = milieu + 1;
    } else {
      gauche = milieu;
      break;
    }
  }
  long long xGauche = 0;
  long long xDroite =
      ceil((double)(valeur - hull[gauche].origine) / hull[gauche].coef) + 300;
  while (xGauche < xDroite) {
    long long milieu = (xGauche + xDroite) / 2;
    if (hull[gauche].origine + milieu * hull[gauche].coef < valeur)
      xGauche = milieu + 1;
    else
      xDroite = milieu;
  }
  long long x = xDroite;
  long long y = hull[gauche].origine + x * hull[gauche].coef;
  for (long long j = -1; j < 2; j++)
    if (gauche + j >= 0 && gauche + j < hull.size()) {
      y = max(y, hull[gauche + j].origine + x * hull[gauche + j].coef);
    }
  return {x, y};
}
int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long N, S;
  cin >> N >> S;
  point points[N];
  for (long long i = 0; i < N; i++) {
    cin >> points[i].vitesse >> points[i].prix;
  }
  long long vInit = 0;
  long long nn = 0;
  sort(points, points + N, compV);
  for (long long i = 0; i < N; i++) {
    if (points[i].prix == 0) {
      vInit = max(vInit, points[i].vitesse);
    } else if (i == 0 || points[i - 1].vitesse != points[i].vitesse) {
      points[nn] = points[i];
      nn++;
    }
  }
  N = nn;
  hull.push_back({0, vInit});
  for (long long i = 0; i < N; i++) {
    if (points[i].vitesse <= vInit) continue;
    pair<long long, long long> r = trouver(points[i].prix);
    Droite nouvelle;
    nouvelle.origine =
        (r.second - points[i].prix) - r.first * points[i].vitesse;
    nouvelle.coef = points[i].vitesse;
    ajouter(nouvelle);
  }
  cout << trouver(S).first << endl;
}
