#include <bits/stdc++.h>
using namespace std;
int n, m, cnt, b[200009];
bool bo[200009];
struct node {
  int x, y;
} a[200009];
bool cmp1(node u, node v) { return u.x < v.x; }
struct cmp2 {
  bool operator()(int u, int v) { return a[u].y > a[v].y; }
};
priority_queue<int, vector<int>, cmp2> Q;
int main() {
  scanf("%d%d", &n, &m);
  int i, k, now = 0, ans = 0;
  for (i = 1; i <= n; i++) scanf("%d%d", &a[i].x, &a[i].y);
  sort(a + 1, a + n + 1, cmp1);
  for (i = 1; i <= n; i++) {
    now++;
    bo[i] = 1;
    Q.push(i);
    ans++;
    if (now > a[i].x) {
      k = Q.top();
      Q.pop();
      bo[k] = 0;
      now--;
      ans--;
    }
  }
  for (i = 1; i <= n; i++)
    if (!bo[i]) b[++cnt] = a[i].y;
  sort(b + 1, b + cnt + 1);
  for (i = 1, now = m; i <= cnt; i++)
    if (now) {
      ans++;
      now = min(now - 1, m - b[i]);
    }
  printf("%d\n", max(0, n - min(ans, m)));
  return 0;
}
