#include <bits/stdc++.h>
using namespace std;
const int iinf = 1e9 + 7;
const int oo = 0x3f3f3f3f;
const long long linf = 1ll << 60;
const double dinf = 1e60;
template <typename T>
inline void scf(T &x) {
  bool f = 0;
  x = 0;
  char c = getchar();
  while ((c < '0' || c > '9') && c != '-') c = getchar();
  if (c == '-') {
    f = 1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    x = x * 10 + c - '0';
    c = getchar();
  }
  if (f) x = -x;
  return;
}
template <typename T1, typename T2>
void scf(T1 &x, T2 &y) {
  scf(x);
  return scf(y);
}
template <typename T1, typename T2, typename T3>
void scf(T1 &x, T2 &y, T3 &z) {
  scf(x);
  scf(y);
  return scf(z);
}
template <typename T1, typename T2, typename T3, typename T4>
void scf(T1 &x, T2 &y, T3 &z, T4 &w) {
  scf(x);
  scf(y);
  scf(z);
  return scf(w);
}
inline char mygetchar() {
  char c = getchar();
  while (c == ' ' || c == '\n') c = getchar();
  return c;
}
template <typename T>
inline bool chkmax(T &x, const T &y) {
  return y > x ? x = y, 1 : 0;
}
template <typename T>
inline bool chkmin(T &x, const T &y) {
  return y < x ? x = y, 1 : 0;
}
const int maxn = 2e5 + 100;
int n, m;
pair<int, int> all[maxn];
set<pair<int, int> > Set;
bool chs[maxn];
bool check(int lb) {
  Set.clear();
  int i = -1;
  while (i + 1 < n && all[i + 1].first > lb)
    ++i, Set.insert(make_pair(-all[i].second, i));
  for (int j = (lb), _end_ = (1); j >= _end_; --j) {
    while (i + 1 < n && all[i + 1].first == j)
      ++i, Set.insert(make_pair(-all[i].second, i));
    if (!(int)Set.size()) return 0;
    Set.erase(Set.begin());
  }
  return 1;
}
void calc(int lb) {
  Set.clear();
  int i = -1;
  while (i + 1 < n && all[i + 1].first > lb)
    ++i, Set.insert(make_pair(-all[i].second, i));
  for (int j = (lb), _end_ = (1); j >= _end_; --j) {
    while (i + 1 < n && all[i + 1].first == j)
      ++i, Set.insert(make_pair(-all[i].second, i));
    chs[Set.begin()->second] = 1;
    Set.erase(Set.begin());
  }
  set<pair<int, int> > s;
  s.clear();
  for (int i = 0, _end_ = (n); i < _end_; ++i)
    if (!chs[i]) s.insert(make_pair(-all[i].second, i));
  int rb = m;
  while ((int)s.size()) {
    int r = -s.begin()->first, i = s.begin()->second;
    s.erase(s.begin());
    if (r > rb) continue;
    chs[i] = 1;
    --rb;
  }
  int ans = 0;
  for (int i = 0, _end_ = (n); i < _end_; ++i)
    if (!chs[i]) ++ans;
  printf("%d\n", ans);
  return;
}
int main() {
  scf(n, m);
  for (int i = 0, _end_ = (n); i < _end_; ++i) {
    int l, r;
    scf(l, r);
    all[i] = make_pair(l, r);
  }
  sort(all, all + n);
  reverse(all, all + n);
  int lb = 0, rb = m, ans;
  while (lb <= rb) {
    int mid = lb + rb >> 1;
    if (check(mid))
      lb = mid + 1, ans = mid;
    else
      rb = mid - 1;
  }
  calc(ans);
  return 0;
}
