#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void output(T a, int p = 0) {
  if (p)
    cout << fixed << setprecision(p) << a << "\n";
  else
    cout << a << "\n";
}
class StarrySkyTree {
 public:
  static const int N = 1 << 20;
  vector<long long> segMin, segMax, segAdd;
  StarrySkyTree() : segMin(N * 2, 0LL), segMax(N * 2, 0LL), segAdd(N * 2, 0) {}
  void update(int k, long long x) {
    k += N - 1;
    segMin[k] = x;
    segMax[k] = x;
    while (k) {
      k = (k - 1) / 2;
      segMin[k] = min(segMin[k * 2 + 1], segMin[k * 2 + 2]);
      segMax[k] = max(segMax[k * 2 + 1], segMax[k * 2 + 2]);
    }
  }
  void add(int a, int b, long long x, int k = 0, int l = 0, int r = N) {
    if (r <= a || b <= l) return;
    if (a <= l && r <= b) {
      segAdd[k] += x;
      while (k) {
        k = (k - 1) / 2;
        segMin[k] = min(segMin[k * 2 + 1] + segAdd[k * 2 + 1],
                        segMin[k * 2 + 2] + segAdd[k * 2 + 2]);
        segMax[k] = max(segMax[k * 2 + 1] + segAdd[k * 2 + 1],
                        segMax[k * 2 + 2] + segAdd[k * 2 + 2]);
      }
      return;
    }
    add(a, b, x, k * 2 + 1, l, (l + r) / 2);
    add(a, b, x, k * 2 + 2, (l + r) / 2, r);
  }
  long long getMin(int a, int b, int k = 0, int l = 0, int r = N) {
    if (r <= a || b <= l) return 1e18;
    if (a <= l && r <= b) return segMin[k] + segAdd[k];
    long long x = getMin(a, b, k * 2 + 1, l, (l + r) / 2);
    long long y = getMin(a, b, k * 2 + 2, (l + r) / 2, r);
    return min(x, y) + segAdd[k];
  }
  long long getMax(int a, int b, int k = 0, int l = 0, int r = N) {
    if (r <= a || b <= l) return -1e18;
    if (a <= l && r <= b) return segMax[k] + segAdd[k];
    long long x = getMax(a, b, k * 2 + 1, l, (l + r) / 2);
    long long y = getMax(a, b, k * 2 + 2, (l + r) / 2, r);
    return max(x, y) + segAdd[k];
  }
};
int main() {
  cin.tie(0);
  ios::sync_with_stdio(0);
  long long N, M;
  cin >> N >> M;
  vector<pair<int, int>> LR(N);
  for (int i = (int)(0); i < (int)(N); ++i) {
    int l, r;
    cin >> l >> r;
    LR[i] = {l, -r};
  }
  sort((LR).begin(), (LR).end());
  for (int i = (int)(0); i < (int)(N); ++i) {
    LR[i].second = -LR[i].second;
  }
  long long ans = max(0LL, N - M);
  StarrySkyTree sst;
  for (int i = (int)(0); i < (int)(N); ++i) {
    int l = LR[i].first, r = LR[i].second;
    sst.add(l, r + 1, 1);
    long long cnt = sst.getMax(l, r + 1);
    ans = max(ans, cnt - (l + M + 2 - r));
  }
  output(ans);
  return 0;
}
