#include <bits/stdc++.h>
using namespace std;
const int SZ = (1 << 18);
struct starry_sky_tree {
  int all[SZ * 2], ma[SZ * 2];
  void init() {
    memset(all, 0, sizeof(all));
    memset(ma, 0, sizeof(ma));
  }
  void add(int a, int b, int x, int k = 0, int l = 0, int r = SZ) {
    if (b <= l || r <= a) return;
    if (a <= l && r <= b) {
      all[k] += x;
      return;
    }
    add(a, b, x, k * 2 + 1, l, (l + r) / 2);
    add(a, b, x, k * 2 + 2, (l + r) / 2, r);
    ma[k] = max(ma[k * 2 + 1] + all[k * 2 + 1], ma[k * 2 + 2] + all[k * 2 + 2]);
  }
  int get() { return ma[0] + all[0]; }
} seg;
int N, M;
int main() {
  cin >> N >> M;
  seg.init();
  vector<pair<int, int> > vec;
  for (int i = 0; i < (N); i++) {
    int l, r;
    cin >> l >> r;
    vec.emplace_back(l, r);
  }
  for (int i = 1; i <= M; ++i) {
    seg.add(i, i + 1, i);
  }
  sort((vec).begin(), (vec).end());
  int t = 0;
  for (auto& p : vec) {
    seg.add(1, p.second + 1, 1);
    int x = seg.get() - M - p.first - 1;
    t = max(t, x);
  }
  cout << max(t, N - M) << endl;
  return 0;
}
