#include <bits/stdc++.h>
using namespace std;
const int N = 1e6;
int gi() {
  int w = 0;
  bool q = 1;
  char c = getchar();
  while ((c < '0' || c > '9') && c != '-') c = getchar();
  if (c == '-') q = 0, c = getchar();
  while (c >= '0' && c <= '9') w = w * 10 + c - '0', c = getchar();
  return q ? w : -w;
}
int mx[N], sum[N], m;
vector<int> v[N];
inline void modify(int i, int l, int r, int k, int t) {
  if (l == r)
    mx[i] += t, sum[i] += t;
  else {
    int mid = (l + r) >> 1;
    k <= mid ? modify((i << 1), l, mid, k, t)
             : modify(((i << 1) | 1), mid + 1, r, k, t);
    sum[i] = max(sum[(i << 1)] + sum[((i << 1) | 1)], -1 << 28);
    mx[i] = max(mx[((i << 1) | 1)], mx[(i << 1)] + sum[((i << 1) | 1)]);
  }
}
inline void build(int i, int l, int r) {
  if (l == r)
    sum[i] = mx[i] = l < m ? -1 : 0;
  else {
    int mid = (l + r) >> 1;
    build((i << 1), l, mid);
    build(((i << 1) | 1), mid + 1, r);
    sum[i] = max(sum[(i << 1)] + sum[((i << 1) | 1)], -1 << 28);
    mx[i] = max(mx[((i << 1) | 1)], mx[(i << 1)] + sum[((i << 1) | 1)]);
  }
}
int main() {
  int n = gi(), i, k, ans = 0;
  m = gi();
  while (n--) k = gi(), v[k].push_back(gi());
  build(1, 1, ++m);
  for (i = 0; i < m; modify(1, 1, m, ++i, -1 << 28)) {
    for (int t : v[i]) modify(1, 1, m, t, 1);
    ans = max(ans, mx[1] - i);
  }
  printf("%d\n", ans);
  return 0;
}
