#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
int T[N << 2], lz[N << 2];
void push(int v, int l, int r) {
  if (lz[v] == 0) return;
  if (l < r) lz[v << 1] += lz[v], lz[v << 1 | 1] += lz[v];
  T[v] += lz[v];
  lz[v] = 0;
}
void upd(int v, int l, int r, int L, int R, int val) {
  push(v, l, r);
  if (l > r || R < l || L > r) return;
  if (L <= l && r <= R) {
    lz[v] = val;
    push(v, l, r);
    return;
  }
  upd(v << 1, l, ((l + r) >> 1), L, R, val);
  upd(v << 1 | 1, ((l + r) >> 1) + 1, r, L, R, val);
  T[v] = max(T[v << 1], T[v << 1 | 1]);
}
int get(int v, int l, int r, int L, int R) {
  push(v, l, r);
  if (l > r || R < l || L > r) return 0;
  if (L <= l && r <= R) return T[v];
  return max(get(v << 1, l, ((l + r) >> 1), L, R),
             get(v << 1 | 1, ((l + r) >> 1) + 1, r, L, R));
}
int n, m;
vector<int> seg[N];
int ans;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> m;
  for (int i = 1; i <= n; ++i) {
    int l, r;
    cin >> l >> r;
    seg[r].push_back(l);
  }
  for (int i = 1; i <= m; ++i) upd(1, 0, m + 1, i, i, -i);
  for (int rig = m + 1; rig >= 1; --rig) {
    for (int lef : seg[rig]) {
      upd(1, 0, m + 1, lef, m + 1, +1);
    }
    int mx = get(1, 0, m + 1, 0, rig - 1);
    ans = max(ans, mx - m - 1 + rig);
  }
  cout << ans << endl;
}
