#include <bits/stdc++.h>
using namespace std;
struct P {
  int l, r;
} a[200005];
struct trie {
  int mx, add;
} t[200005 << 2];
int n, m;
bool cmp(P a, P b) { return a.l < b.l; }
void pwd(int k, int l, int r) {
  if (l == r) return;
  l = k << 1, r = k << 1 | 1;
  if (t[k].add) {
    t[l].add += t[k].add;
    t[r].add += t[k].add;
    t[l].mx += t[k].add;
    t[r].mx += t[k].add;
    t[k].add = 0;
  }
}
void update(int k, int l, int r, int L, int R, int val) {
  pwd(k, l, r);
  if (L <= l && R >= r) {
    t[k].add += val;
    t[k].mx += val;
    return;
  }
  int mid = l + r >> 1;
  if (L <= mid) update(k << 1, l, mid, L, R, val);
  if (R > mid) update(k << 1 | 1, mid + 1, r, L, R, val);
  t[k].mx = max(t[k << 1].mx, t[k << 1 | 1].mx);
}
void build(int k, int l, int r) {
  if (l == r) {
    t[k].mx = l - m;
    return;
  }
  int mid = l + r >> 1;
  build(k << 1, l, mid);
  build(k << 1 | 1, mid + 1, r);
  t[k].mx = max(t[k << 1].mx, t[k << 1 | 1].mx);
}
int main() {
  scanf("%d%d", &n, &m);
  m++;
  for (int i = 1; i <= n; i++) scanf("%d%d", &a[i].l, &a[i].r);
  sort(a + 1, a + n + 1, cmp);
  build(1, 1, m);
  int ans = 0;
  for (int i = 0, p = 0; i <= m; i++) {
    while (p < n && a[p + 1].l == i) p++, update(1, 1, m, 1, a[p].r, 1);
    ans = max(ans, t[1].mx - i);
  }
  printf("%d", ans);
  return 0;
}
