#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10, inf = 1 << 30;
int n, m;
pair<int, int> seg[N];
int add[N << 2], mx[N << 2];
void Add(int c, int l, int r, int L, int R, int x) {
  if (L <= l && r <= R)
    add[c] += x, mx[c] += x;
  else {
    int m = (l + r) >> 1;
    if (L <= m) Add(c << 1, l, m, L, R, x);
    if (R > m) Add(c << 1 | 1, m + 1, r, L, R, x);
    mx[c] = max(mx[c << 1], mx[c << 1 | 1]) + add[c];
  }
}
int query(int c, int l, int r, int L, int R) {
  if (L <= l && r <= R)
    return mx[c];
  else {
    int m = (l + r) >> 1;
    int res = -inf;
    if (L <= m) res = max(res, query(c << 1, l, m, L, R));
    if (R > m) res = max(res, query(c << 1 | 1, m + 1, r, L, R));
    return res + add[c];
  }
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < (n); ++i) scanf("%d%d", &seg[i].first, &seg[i].second);
  sort(seg, seg + n);
  int ans = max(0, n - m);
  int c = 0;
  for (int i = 1; i < (m + 1); ++i) Add(1, 1, m + 1, i, i, -(m + 1 - i));
  for (int s = 1; s < (m); ++s) {
    while (c < n && seg[c].first <= s) {
      Add(1, 1, m + 1, s + 1, seg[c].second, 1);
      ++c;
    }
    Add(1, 1, m + 1, s + 1, m, -1);
    ans = max(ans, query(1, 1, m + 1, s + 1, m));
  }
  printf("%d\n", ans);
  return 0;
}
