#include <bits/stdc++.h>

const int MAXN = 200010;
int n, m;
int tag[MAXN << 2], tree[MAXN << 2];
void mkadd(int u, int v) { tag[u] += v, tree[u] += v; }
void pushdown(int u) {
	if (int & t = tag[u]) {
		mkadd(u << 1, t);
		mkadd(u << 1 | 1, t);
		t = 0;
	}
}
void mdf(int u, int l, int r, int L, int R, int v) {
	if (L <= l && r <= R) return mkadd(u, v);
	int mid = l + r >> 1; pushdown(u);
	if (L <= mid) mdf(u << 1, l, mid, L, R, v);
	if (mid < R) mdf(u << 1 | 1, mid + 1, r, L, R, v);
	tree[u] = std::max(tree[u << 1], tree[u << 1 | 1]);
}
std::vector<int> R[MAXN];
int main() {
	std::ios_base::sync_with_stdio(false), std::cin.tie(0);
	std::cin >> m >> n;
	for (int i = 1, t1, t2; i <= m; ++i) {
		std::cin >> t1 >> t2;
		R[t1].push_back(t2);
	}
	for (int i = 0; i <= n + 1; ++i)
		mdf(1, 0, n + 1, i, i, -(n - i + 1));
	int ans = std::max(m - n, 0);
	for (int i = 0; i <= n + 1; ++i) {
		mdf(1, 0, n + 1, i, i, 0xcfcfcfcf);
		for (auto t : R[i]) mdf(1, 0, n + 1, 0, t, 1);
		ans = std::max(ans, tree[1] - i);
	}
	std::cout << ans << std::endl;
	return 0;
}
