#include <bits/stdc++.h>
using namespace std;
struct Info {
  int l, r;
  inline bool operator<(const Info &x) const {
    return r == x.r ? l < x.l : r > x.r;
  }
} tk[200007];
multiset<Info> S;
multiset<Info>::iterator it;
inline bool Cmp(const Info &a, const Info &b) {
  return a.l == b.l ? a.r < b.r : a.l > b.l;
}
int fastin() {
  register int i;
  register char ch;
  while (ch = getchar(), ch < '0' || ch > '9')
    ;
  i = ch - '0';
  while (ch = getchar(), ch >= '0' && ch <= '9') i = i * 10 + ch - '0';
  return i;
}
int main() {
  register int n, m, i, t, ans, cnt;
  n = fastin(), m = fastin();
  for (i = 1; i <= n; ++i) {
    tk[i].l = fastin();
    tk[i].r = fastin();
  }
  sort(tk + 1, tk + n + 1, Cmp);
  t = tk[1].l;
  for (i = 1; t; --t) {
    while (i <= n && tk[i].l >= t) S.insert(tk[i++]);
    if (S.size()) S.erase(S.begin());
  }
  cnt = 0;
  for (; i <= n; ++i) tk[++cnt] = tk[i];
  for (it = S.begin(); it != S.end(); ++it) tk[++cnt] = *it;
  if (cnt == 0) {
    puts("0");
    fclose(stdin);
    fclose(stdout);
    return 0;
  }
  sort(tk + 1, tk + cnt + 1);
  ans = 0;
  for (t = m, i = 1; i <= cnt; ++i) {
    if (tk[i].r <= t)
      --t;
    else
      ++ans;
  }
  printf("%d\n", ans);
  return 0;
}
