#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200005;
const long long MOD = 1000000007;
const int iNF = 0x3f3f3f3f;
int n, m, ans, seg[MAXN * 4], tag[MAXN * 4];
vector<int> x[MAXN];
void push(int o) {
  if (tag[o]) {
    seg[o] += tag[o];
    tag[o << 1] += tag[o];
    tag[o << 1 | 1] += tag[o];
    tag[o] = 0;
  }
}
int get(int o) { return seg[o] + tag[o]; }
void pull(int o) { seg[o] = max(get(o << 1), get(o << 1 | 1)); }
void build(int o, int l, int r) {
  if (r == l + 1) {
    seg[o] = -(m + 1z - l);
    tag[o] = 0;
  } else {
    int md = (l + r) >> 1;
    build(o << 1, l, md);
    build(o << 1 | 1, md, r);
    pull(o);
  }
}
int qry(int qL, int qR, int o = 1, int nL = 0, int nR = m + 1) {
  if (qL >= nR || qR <= nL || qL >= qR) {
    return -iNF;
  } else if (qL <= nL && nR <= qR) {
    return get(o);
  } else {
    push(o);
    int nM = (nL + nR) >> 1;
    return max(qry(qL, qR, o << 1, nL, nM), qry(qL, qR, o << 1 | 1, nM, nR));
  }
}
void add(int qL, int qR, int o = 1, int nL = 0, int nR = m + 1) {
  if (qL >= nR || qR <= nL || qL >= qR) {
    return;
  } else if (qL <= nL && nR <= qR) {
    tag[o]++;
  } else {
    push(o);
    int nM = (nL + nR) >> 1;
    add(qL, qR, o << 1, nL, nM);
    add(qL, qR, o << 1 | 1, nM, nR);
    pull(o);
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  ;
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    int l, r;
    cin >> l >> r;
    x[l].emplace_back(r);
  }
  ans = max(0, n - m);
  build(1, 0, m + 2);
  for (int i = 0; i < m + 1; i++) {
    for (auto r : x[i]) {
      add(0, r + 1);
    }
    ans = max(ans, qry(i + 2, m + 2) - i);
  }
  cout << ans << '\n';
  return 0;
}
