#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 9;
int n, m, ans, M[N], d[N];
vector<int> v[N];
int Qry(int x, int l, int r, int ql, int qr) {
  if (l == ql && r == qr) return M[x];
  int mid = (l + r) >> 1;
  if (qr <= mid) return Qry((x << 1), l, mid, ql, qr) + d[x];
  if (ql > mid) return Qry((x << 1 | 1), mid + 1, r, ql, qr) + d[x];
  return max(Qry((x << 1), l, mid, ql, mid),
             Qry((x << 1 | 1), mid + 1, r, mid + 1, qr)) +
         d[x];
}
void Moy(int x, int l, int r, int ql, int qr, int t) {
  if (l == ql && r == qr) return (void)(M[x] += t, d[x] += t);
  int mid = (l + r) >> 1;
  if (qr <= mid)
    Moy((x << 1), l, mid, ql, qr, t);
  else if (ql > mid)
    Moy((x << 1 | 1), mid + 1, r, ql, qr, t);
  else
    Moy((x << 1), l, mid, ql, mid, t),
        Moy((x << 1 | 1), mid + 1, r, mid + 1, qr, t);
  M[x] = max(M[(x << 1)], M[(x << 1 | 1)]) + d[x];
}
int main() {
  scanf("%d%d", &n, &m);
  ++m;
  for (int i = 1, l, r; i <= n; ++i) scanf("%d%d", &l, &r), v[l].push_back(r);
  ans = max(n - m, 0);
  for (int i = 0; i <= m; ++i) Moy(1, 0, m, i, i, i - m);
  for (int i = 0; i < m; ++i) {
    for (auto v : ::v[i]) Moy(1, 0, m, 0, v, 1);
    ans = max(ans, Qry(1, 0, m, i + 1, m) - i);
  }
  printf("%d\n", ans);
  return 0;
}
