#include <bits/stdc++.h>
using namespace ::std;
const int maxn = 2e5 + 500;
const int inf = 1e9 + 100;
vector<int> vec[maxn];
vector<int> rvec[maxn];
int seg[maxn * 4];
int lazy[maxn * 4];
int Y;
void add(int node, int v) {
  seg[node] += v;
  lazy[node] += v;
}
void shift(int a) {
  add(2 * a, lazy[a]);
  add(2 * a + 1, lazy[a]);
  lazy[a] = 0;
}
void update(int L, int R, int node, int l, int r, int v) {
  if (l <= L && R <= r) {
    add(node, v);
    return;
  }
  if (r <= L || R <= l) {
    return;
  }
  shift(node);
  int mid = (L + R) / 2;
  update(L, mid, 2 * node, l, r, v);
  update(mid, R, 2 * node + 1, l, r, v);
  seg[node] = max(seg[2 * node], seg[2 * node + 1]);
}
int main() {
  int n, m, ans = 0;
  cin >> n >> m;
  ans = max(0, (n - m));
  Y = m + 5;
  for (int i = 0; i < n; i++) {
    int l, r;
    cin >> l >> r;
    vec[r].push_back(l);
    rvec[l].push_back(r);
  }
  int cnt = 0;
  for (int i = 1; i < m + 1; i++) {
    cnt -= vec[i - 1].size();
    cnt += rvec[i - 1].size();
    update(0, Y, 1, i - 1, i, cnt - m);
    ans = max(ans, seg[1]);
    update(0, Y, 1, 0, i, 1);
    for (auto l : vec[i]) {
      update(0, Y, 1, l, i, -1);
    }
  }
  cout << endl << ans;
}
