#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 5;
int N, M, ans;
struct seg {
  int l, r;
} a[MAXN];
bool cmp(seg s1, seg s2) { return s1.l < s2.l; }
int mx[MAXN << 2], tag[MAXN << 2];
void pushup(int o) { mx[o] = max(mx[(o << 1)], mx[(o << 1 | 1)]); }
void add(int o, int k) { mx[o] += k, tag[o] += k; }
void pushdown(int o) {
  if (tag[o]) add((o << 1), tag[o]), add((o << 1 | 1), tag[o]), tag[o] = 0;
}
void build(int o, int l, int r) {
  if (l == r)
    mx[o] = l;
  else
    build((o << 1), l, ((l + r) >> 1)),
        build((o << 1 | 1), ((l + r) >> 1) + 1, r), pushup(o);
}
void insert(int o, int l, int r, int L, int R, int K) {
  if (r < L || l > R) return;
  if (l >= L && r <= R) return add(o, K);
  pushdown(o), insert((o << 1), l, ((l + r) >> 1), L, R, K),
      insert((o << 1 | 1), ((l + r) >> 1) + 1, r, L, R, K), pushup(o);
}
int query(int o, int l, int r, int L, int R) {
  if (r < L || l > R) return 0;
  if (l >= L && r <= R)
    return mx[o];
  else
    return max(query(o << 1, l, ((l + r) >> 1), L, R),
               query(o << 1 | 1, ((l + r) >> 1) + 1, r, L, R));
}
int main() {
  scanf("%d%d", &N, &M);
  for (int i = 1; i <= N; ++i) scanf("%d%d", &a[i].l, &a[i].r);
  ans = max(0, N - M);
  sort(a + 1, a + N + 1, cmp);
  build(1, 1, N + 1);
  for (int i = 1; i <= N; ++i) {
    insert(1, 1, N + 1, 1, a[i].r, 1);
    ans = max(ans, -M - 1 - a[i].l + query(1, 1, N + 1, 1, a[i].r));
  }
  printf("%d\n", ans);
  return 0;
}
