#include <bits/stdc++.h>
const int N = 200005, inf = 0x3f3f3f3f;
int n, m, ans;
int tag[N << 2], max[N << 2];
void build(int o = 1, int l = 0, int r = m) {
  max[o] = r - m;
  if (l == r) return;
  int mid = l + r >> 1;
  build(o << 1, l, mid), build(o << 1 | 1, mid + 1, r);
}
void pushup(int x) { max[x] = std::max(max[x << 1], max[x << 1 | 1]) + tag[x]; }
void modify(int p, int o = 1, int l = 0, int r = m) {
  if (p < l) return;
  if (p >= r) {
    ++max[o], ++tag[o];
    return;
  }
  int mid = l + r >> 1;
  modify(p, o << 1, l, mid), modify(p, o << 1 | 1, mid + 1, r);
  pushup(o);
}
int query(int p, int o = 1, int l = 0, int r = m) {
  if (p > r) return -inf;
  if (p <= l) return max[o];
  int mid = l + r >> 1;
  return std::max(query(p, o << 1, l, mid), query(p, o << 1 | 1, mid + 1, r)) +
         tag[o];
}
std::vector<int> v[N];
int main() {
  std::ios::sync_with_stdio(0), std::cin.tie(0);
  std::cin >> n >> m;
  int rmin = inf;
  for (int i = 0, l, r; i < n; ++i) {
    std::cin >> l >> r, v[l].emplace_back(r), rmin = std::min(r, rmin);
    if (l >= rmin) ans = std::max(ans, n - m);
  }
  ++m;
  build();
  for (int i = 0; i < m; ++i) {
    for (int p : v[i]) modify(p);
    ans = std::max(ans, query(i + 1) - i);
  }
  std::cout << ans << '\n';
  return 0;
}
