#include <bits/stdc++.h>
using namespace std;
int n, m, p, heap[200100], tot, cnt[200100], ans;
struct data {
  int r;
  data *nxt;
} pool[200100], *tp = pool, *fst[200100];
int getint() {
  char ch;
  while (!isdigit(ch = getchar()))
    ;
  int x = ch - '0';
  ;
  for (; isdigit(ch = getchar()); x = x * 10 + ch - '0')
    ;
  return x;
}
int main() {
  scanf("%d%d", &n, &m), ans = n;
  for (int i = 1; i <= n; ++i) {
    int l = getint(), r = getint();
    if (!l) ++cnt[r];
    *tp = (data){r, fst[l]}, fst[l] = tp++;
  }
  p = 1;
  for (int i = 1; i <= m; ++i)
    for (data *j = fst[i]; j; j = j->nxt)
      if (p <= i)
        ++p, --ans, heap[++tot] = j->r,
                    push_heap(heap + 1, heap + 1 + tot, greater<int>());
      else {
        int r = j->r;
        if (heap[1] < r) {
          pop_heap(heap + 1, heap + 1 + tot, greater<int>());
          swap(r, heap[tot]),
              push_heap(heap + 1, heap + 1 + tot, greater<int>());
        }
        ++cnt[r];
      }
  for (int i = 1; i <= m; ++i)
    for (; cnt[i] && p <= m; --ans, p = max(p, i) + 1)
      ;
  printf("%d\n", ans);
  return 0;
}
