#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
int n, m;
pair<int, int> seg[N];
int uf[N];
priority_queue<int, vector<int>, greater<int>> Q;
int find(int x) { return uf[x] == x ? x : (uf[x] = find(uf[x])); }
void unit(int x, int y) {
  x = find(x), y = find(y);
  if (x > y) swap(x, y);
  if (x ^ y) uf[x] = y;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1, l, r; i <= n; i++) {
    scanf("%d%d", &l, &r);
    seg[i] = pair<int, int>(l, r);
  }
  sort(seg + 1, seg + n + 1);
  uf[0] = 1;
  for (int i = 1; i <= m + 1; i++) {
    uf[i] = i;
  }
  pair<int, int> *p = seg + 1, *_p = seg + n + 1;
  int ans = 0;
  for (int i = 0; i <= m; i++) {
    if (i && find(i) == i) {
      Q.push(0);
    }
    while (p != _p && p->first == i) {
      int R = p->second;
      bool suc = false;
      if (!Q.empty()) {
        int tp = Q.top();
        if (tp < R) {
          int p = find(tp);
          if (p <= m) {
            unit(p, p + 1);
            Q.pop();
            Q.push(R);
            ans++;
            suc = true;
          }
        }
      }
      if (!suc) {
        int p = find(R);
        if (p <= m) {
          unit(p, p + 1);
          ans++;
          suc = true;
        }
      }
      p++;
    }
  }
  printf("%d\n", n - ans);
  return 0;
}
