#include <bits/stdc++.h>
using namespace std;
template <class T>
bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
bool chmin(T &a, const T &b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class A, size_t N, class T>
void Fill(A (&a)[N], const T &v) {
  fill((T *)a, (T *)(a + N), v);
}
const long long int INF = 1e9 + 7;
int main() {
  int N, M, ans = 0;
  vector<pair<int, int> > v;
  cin >> N >> M;
  for (int i = 0; i < (N); i++) {
    int L, R;
    cin >> L >> R;
    R--;
    if (L < R) v.emplace_back(L, R);
  }
  sort((v).begin(), (v).end());
  ans = max(0, N - M);
  chmax(M, N);
  priority_queue<int> que;
  int cnt = 0, bf = 0, mx = 0;
  for (int i = 0; i < (M + 2); i++) {
    while (!que.empty() && -que.top() < i) {
      int num = N - que.size();
      int len = i - bf - 1;
      chmax(mx, len - num);
      que.pop();
      bf = i;
    }
    if (cnt < v.size() && v[cnt].first == i) {
      int num = N - que.size();
      int len = i - bf;
      chmax(mx, len - num);
      bf = i;
    }
    while (cnt < v.size() && v[cnt].first == i) {
      que.push(-v[cnt].second);
      cnt++;
    }
  }
  ans += mx;
  cout << ans << endl;
  return 0;
}
