#include <bits/stdc++.h>
using namespace std;
class DebugStream {
} LOG;
template <typename T>
DebugStream &operator<<(DebugStream &s, const T &) {
  return s;
}
mt19937 rnd(time(NULL));
const int maxN = 2e5 + 9, maxV = 100, MOD = 1e9 + 7, SQ = 335, lg = 20, bs = 29;
int T[maxN << 1], xs[maxV], ss[maxV], n, m, sz;
int query(int l, int r) {
  int ret = MOD;
  for (l += sz, r += sz; l < r; l >>= 1, r >>= 1) {
    if (l & 1) ret = min(ret, T[l++]);
    if (r & 1) ret = min(ret, T[--r]);
  }
  return ret;
}
void update(int w, int x) {
  w += sz;
  T[w] = x;
  while (w > 1) w >>= 1, T[w] = min(T[w << 1], T[w << 1 | 1]);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m;
  for (int i = 0; i < n; i++) cin >> xs[i] >> ss[i];
  sz = m * 2 + 5;
  for (int i = 1; i < sz; i++) T[i + sz] = MOD;
  for (int i = sz - 1; i > 0; i--) T[i] = min(T[i << 1], T[i << 1 | 1]);
  LOG << T[1] << ' ' << query(0, 2) << '\n';
  int ans = MOD;
  for (int u = 1; u < sz; u++) {
    int beste = MOD;
    for (int i = 0; i < n; i++) {
      if (xs[i] + ss[i] > u) continue;
      int costo = u - (xs[i] + ss[i]);
      int limite = max(0, xs[i] - ss[i] - costo - 1);
      beste = min(beste, costo + query(limite, sz));
    }
    update(u, beste);
    if (u >= m) ans = min(ans, beste);
  }
  cout << ans << '\n';
}
