#include <bits/stdc++.h>

const int N = 200005, inf = 0x3f3f3f3f;

int n, m, ans;
int tag[N << 2], max[N << 2];

void build(int o = 1, int l = 0, int r = m) {
	max[o] = r - m;
	if (l == r) return; int mid = l + r >> 1;
	build(o << 1, l, mid), build(o << 1 | 1, mid + 1, r);
}
void pushup(int x) { max[x] = std::max(max[x << 1], max[x << 1 | 1]) + tag[x]; }
void modify(int p, int o = 1, int l = 0, int r = m) {
	if (p < l) return;
	if (p >= r) {++max[o], ++tag[o]; return;}
	int mid = l + r >> 1;
	modify(p, o << 1, l, mid), modify(p, o << 1 | 1, mid + 1, r);
	pushup(o);
}
int query(int p, int o = 1, int l = 0, int r = m) {
	if (p > r) return -inf;
	if (p <= l) return max[o];
	int mid = l + r >> 1;
	return std::max(query(p, o << 1, l, mid), query(p, o << 1 | 1, mid + 1, r)) + tag[o];
}

std::vector<int> v[N];
int main() {
	std::ios::sync_with_stdio(0), std::cin.tie(0);
	std::cin >> n >> m; int lmax = 0, rmin = inf;
	for (int i = 0, l, r; i < n; ++i) {
		std::cin >> l >> r, v[l].emplace_back(r);
		lmax = std::max(lmax, l), rmin = std::min(rmin, r);
	}
	if (lmax >= rmin) ans = std::max(ans, n - m);
	++m; build();
	for (int i = 0; i < m; ++i) {
		for (int p : v[i]) modify(p);
		ans = std::max(ans, query(i + 1) - i);
	}
	std::cout << ans << '\n';
	return 0;
}