#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
struct node {
  int l, r;
} v[N];
int s[N], i, j, k, n, m, z, an, R;
char c;
inline char getc() {
  static char s[10000000], *l = s, *r = s;
  if (l == r) l = s, r = s + fread(s, 1, 10000000, stdin);
  return l == r ? 0 : *l++;
}
int read() {
  int z = 0;
  do c = getc();
  while (c < '0' || c > '9');
  while (c >= '0' && c <= '9') z *= 10, z += c - '0', c = getc();
  return z;
}
bool cmp(node a, node b) { return a.l < b.l; }
priority_queue<int, vector<int>, greater<int> > q;
void solve() {
  n = read(), m = read();
  for (i = 1; i <= n; ++i) v[i] = (node){read(), read()}, ++s[v[i].r];
  sort(v + 1, v + n + 1, cmp), v[n + 1].l = m + 1;
  for (j = 1; !v[j].l; ++j)
    ;
  for (i = 1; j <= n; ++j) {
    if (i <= v[j].l)
      ++i, ++an, --s[v[j].r], q.push(v[j].r);
    else {
      z = q.top();
      if (z < v[j].r) ++s[z], q.pop(), --s[v[j].r], q.push(v[j].r);
    }
  }
  R = i;
  for (i = j = m; j; --j) {
    for (; s[j]; --s[j])
      if (j <= i) {
        --i, ++an;
        if (i <= R) return;
      } else
        break;
  }
}
int main() {
  solve();
  printf("%d\n", n - an);
  return 0;
}
