#include <bits/stdc++.h>
using namespace std;
clock_t __stt;
inline void TStart() { __stt = clock(); }
inline void TReport() {
  printf("\nTaken Time : %.3lf sec\n",
         (double)(clock() - __stt) / CLOCKS_PER_SEC);
}
template <typename T>
T MIN(T a, T b) {
  return a < b ? a : b;
}
template <typename T>
T MAX(T a, T b) {
  return a > b ? a : b;
}
template <typename T>
T ABS(T a) {
  return a > 0 ? a : (-a);
}
template <typename T>
void UMIN(T &a, T b) {
  if (b < a) a = b;
}
template <typename T>
void UMAX(T &a, T b) {
  if (b > a) a = b;
}
int n, m, res;
pair<int, int> qs[1000005];
namespace segT {
int s[2000005], t[2000005];
void init(int p, int L, int R) {
  s[p] = -1;
  t[p] = -1;
  if (L < R) {
    int M = ((L + R) >> 1);
    init((p << 1), L, M);
    init(((p << 1) | 1), M + 1, R);
  }
}
void modify(int p, int d, int v, int l = 0, int r = m) {
  if (l == r) {
    s[p] = t[p] = v;
    return;
  }
  int M = ((l + r) >> 1);
  if (d <= M)
    modify((p << 1), d, v, l, M);
  else
    modify(((p << 1) | 1), d, v, M + 1, r);
  s[p] = s[p << 1] + s[(p << 1) | 1];
  t[p] = MAX(t[p << 1], t[(p << 1) | 1] + s[p << 1]);
}
void add(int p, int d, int v, int l = 0, int r = m) {
  if (l == r) {
    s[p] += v;
    t[p] += v;
    return;
  }
  int M = ((l + r) >> 1);
  if (d <= M)
    add((p << 1), d, v, l, M);
  else
    add(((p << 1) | 1), d, v, M + 1, r);
  s[p] = s[p << 1] + s[(p << 1) | 1];
  t[p] = MAX(t[p << 1], t[(p << 1) | 1] + s[p << 1]);
}
int query(int p, int R, int c = 0, int l = 0, int r = m) {
  if (l == r) return s[p] + c;
  int M = ((l + r) >> 1);
  if (R > M) {
    return MAX(t[p << 1] + c,
               query(((p << 1) | 1), R, c + s[p << 1], M + 1, r));
  } else {
    return query((p << 1), R, c, l, M);
  }
}
};  // namespace segT
int main() {
  scanf("%d%d", &n, &m);
  ++m;
  int i, j, k;
  for (i = 0; i < n; ++i) {
    scanf("%d%d", &qs[i].first, &qs[i].second);
  }
  sort(qs, qs + n);
  segT::init(1, 0, m);
  segT::modify(1, 0, 0);
  segT::modify(1, m, 0);
  for (i = 1; i < m; ++i) segT::modify(1, i, -1);
  res = MAX(0, n - m + 1);
  for (i = 0; i < n; ++i) {
    segT::add(1, m - qs[i].second, 1);
    UMAX(res, segT::query(1, qs[i].first + 1) - qs[i].first);
  }
  printf("%d\n", res);
  return 0;
}
