#include <bits/stdc++.h>
using namespace std;
int n, m, ans, seg[1 << 19], la[1 << 19];
pair<int, int> c[200005];
void lazy(int l, int r, int k) {
  seg[k] += la[k];
  if (l != r) {
    la[k * 2 + 1] += la[k];
    la[k * 2 + 2] += la[k];
  }
  la[k] = 0;
}
void up(int a, int b, int l, int r, int k, int x) {
  lazy(l, r, k);
  if (r < a || b < l) return;
  if (a <= l && r <= b) {
    la[k] += x;
    lazy(l, r, k);
    return;
  }
  up(a, b, l, (l + r - 1) / 2, k * 2 + 1, x);
  up(a, b, (l + r + 1) / 2, r, k * 2 + 2, x);
  seg[k] = max(seg[k * 2 + 1], seg[k * 2 + 2]);
}
int que(int a, int b, int l, int r, int k) {
  lazy(l, r, k);
  if (r < a || b < l) return 0;
  if (a <= l && r <= b) return seg[k];
  return max(que(a, b, l, (l + r - 1) / 2, k * 2 + 1),
             que(a, b, (l + r + 1) / 2, r, k * 2 + 2));
}
int main(void) {
  cin >> n >> m;
  ans = max(ans, n - m);
  for (int i = 0; i < n; i++) scanf("%d%d", &c[i].first, &c[i].second);
  sort(c, c + n);
  for (int i = 1; i <= m; i++) up(i, i, 0, (1 << 18) - 1, 0, -(m - i + 1));
  for (int i = 0; i < n; i++) {
    up(1, c[i].second, 0, (1 << 18) - 1, 0, 1);
    if (c[i].first + 1 <= m)
      ans = max(ans, que(c[i].first + 1, m, 0, (1 << 18) - 1, 0) - c[i].first);
  }
  printf("%d\n", ans);
}
