#include <bits/stdc++.h>
namespace io {
int F() {
  int n = 0, F = 1;
  char ch;
  while ((ch = getchar()) != '-' && (ch < '0' || ch > '9'))
    ;
  ch == '-' ? F = 0 : n = ch - '0';
  while ((ch = getchar()) >= '0' && ch <= '9') n = n * 10 + ch - '0';
  return F ? n : -n;
}
}  // namespace io
struct qu {
  int x, l, r, v;
} q[222222];
int pq;
bool operator<(const qu &x, const qu &y) { return x.x < y.x; }
int f[222222];
struct st {
  int add;
  int min;
  int l, r;
} t[555555];
void pd(int o) {
  if (t[o].add) {
    t[o].min += t[o].add;
    if (t[o].l == t[o].r) {
      t[o].add = 0;
      return;
    }
    t[o << 1].add += t[o].add;
    t[o << 1 | 1].add += t[o].add;
    t[o].add = 0;
  }
}
inline void MT(int o) {
  t[o].min =
      ((t[o << 1].min + t[o << 1].add) < (t[o << 1 | 1].min + t[o << 1 | 1].add)
           ? (t[o << 1].min + t[o << 1].add)
           : (t[o << 1 | 1].min + t[o << 1 | 1].add));
}
void BT(int o, int l, int r) {
  t[o].l = l, t[o].r = r;
  if (l == r) {
    t[o].min = f[l] + l;
    return;
  }
  int mid = l + r >> 1;
  BT(o << 1, l, mid);
  BT(o << 1 | 1, mid + 1, r);
  MT(o);
}
int L, R, V;
void ad(int o) {
  if (t[o].l >= L && t[o].r <= R) {
    t[o].add += V;
    return;
  }
  pd(o);
  int mid = t[o].l + t[o].r >> 1;
  if (L <= mid) ad(o << 1);
  if (R > mid) ad(o << 1 | 1);
  MT(o);
}
void add(int l, int r, int v) {
  L = l, R = r, V = v;
  ad(1);
}
int ans;
void que(int o) {
  pd(o);
  if (t[o].l >= L && t[o].r <= R) {
    (ans > (t[o].min) ? ans = (t[o].min), 1 : 0);
    return;
  }
  int mid = t[o].l + t[o].r >> 1;
  if (L <= mid) que(o << 1);
  if (R > mid) que(o << 1 | 1);
}
int query(int l, int r) {
  L = l, R = r, ans = 0x3f3f3f3f;
  que(1);
  return ans;
}
int main() {
  int n = io::F(), m = io::F();
  for (register int i = 1; i <= n; ++i) {
    int x = io::F(), y = io::F();
    if (x + 1 == y) x = m, y = m + 1;
    q[++pq] = (qu){y + 1, x, m, 1};
    f[x]--;
  }
  for (register int i = 1; i <= m; ++i) f[i] += f[i - 1];
  BT(1, 0, m);
  std::sort(q + 1, q + pq + 1);
  add(0, m, m + 1);
  int now = 1;
  int ans = 0;
  for (register int i = 1; i <= m + 1; ++i) {
    add(0, m, -1);
    while (now <= pq && q[now].x == i) {
      add(q[now].l, q[now].r, q[now].v);
      ++now;
    }
    int tmp = query(0, i - 1);
    (ans > (tmp) ? ans = (tmp), 1 : 0);
  }
  printf("%d\n", -ans);
  return 0;
}
