#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 10, MAXM = 4e6 + 10;
const int INF = INT_MAX, SINF = 0x3f3f3f3f;
const long long llINF = LLONG_MAX;
const int MOD = 1e9 + 7, mod = 998244353;
const int inv2 = 5e8 + 4;
int n, m;
struct Node {
  int l, r;
  bool operator<(const Node &rhs) const {
    return l ^ rhs.l ? l < rhs.l : r > rhs.r;
  }
} e[MAXN];
int ans = 0;
priority_queue<int, vector<int>, greater<int> > pq;
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%d%d", &e[i].l, &e[i].r);
  int l = 0, r = m + 1;
  sort(e + 1, e + n + 1);
  vector<int> v;
  for (int i = 1; i <= n; i++) {
    pq.push(e[i].r);
    if (l < r - 1 && l < e[i].l)
      l++;
    else
      v.push_back(pq.top()), pq.pop();
  }
  sort((v).begin(), (v).end());
  for (auto j : v)
    if (l < r - 1 && r >= j)
      r--;
    else
      ans++;
  cout << ans;
  return 0;
}
