#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 10;
vector<int> p[MAXN];
int n, m;
int mx[MAXN << 2], add[MAXN << 2];
void pushup(int k) { mx[k] = add[k] + max(mx[k << 1], mx[k << 1 | 1]); }
void build(int k, int l, int r) {
  if (l == r) {
    mx[k] = l;
    return;
  }
  build(k << 1, l, ((l + r) >> 1));
  build(k << 1 | 1, ((l + r) >> 1) + 1, r);
  pushup(k);
}
void update(int a, int b, int k, int l, int r) {
  if (a <= l && r <= b) {
    mx[k]++;
    add[k]++;
    return;
  }
  if (a <= ((l + r) >> 1)) update(a, b, k << 1, l, ((l + r) >> 1));
  if (b > ((l + r) >> 1)) update(a, b, k << 1 | 1, ((l + r) >> 1) + 1, r);
  pushup(k);
}
int query(int a, int b, int k, int l, int r) {
  if (a <= l && r <= b) return mx[k];
  int ret = -1 << 28;
  if (a <= ((l + r) >> 1))
    ret = max(ret, query(a, b, k << 1, l, ((l + r) >> 1)));
  if (b > ((l + r) >> 1))
    ret = max(ret, query(a, b, k << 1 | 1, ((l + r) >> 1) + 1, r));
  return ret;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) {
    int l, r;
    scanf("%d%d", &l, &r);
    p[l].push_back(r);
  }
  build(1, 0, m + 1);
  int res = 0;
  for (int i = 0; i <= m + 1; i++) {
    for (auto j : p[i]) update(0, j, 1, 0, m + 1);
    res = max(res, query(i + 1, m + 1, 1, 0, m + 1) - m - i - 1);
  }
  printf("%d", max(res, n - m));
  return 0;
}
