#include<bits/stdc++.h>
using namespace std;

const int N = 1e6 + 9;

int n, m, ans, M[N], d[N];
vector<int>v[N];
#define L (x<<1)
#define R (x<<1|1)
int Qry (int x, int l, int r, int ql, int qr) {
	if (l == ql && r == qr) return M[x];
	int mid = (l + r) >> 1;
	if (qr <= mid) return Qry(L, l, mid, ql, qr) + d[x];
	if (ql > mid) return Qry(R, mid + 1, r, ql, qr) + d[x];
	return max(Qry(L, l, mid, ql, mid), Qry(R, mid + 1, r, mid + 1, qr)) + d[x];
}

void Moy (int x, int l, int r, int ql, int qr, int t) {
	if (l == ql && r == qr) return (void)(M[x] += t, d[x] += t);
	int mid = (l + r) >> 1;
	if (qr <= mid) Moy(L, l, mid, ql, qr, t);
	else if (ql > mid) Moy(R, mid + 1, r, ql, qr, t);
	else Moy(L, l, mid, ql, mid, t), Moy(R, mid + 1, r, mid + 1, qr, t);
	M[x] = max(M[L], M[R]) + d[x];
}

int main () {
	scanf("%d%d", &n, &m); ans = max(n - m, 0); ++m;
	for (int i = 1, l, r; i <= n; ++i) scanf("%d%d", &l, &r), v[l].push_back(r);
	for (int i = 0; i <= m; ++i) Moy(1, 0, m, i, i, i - m);
	for (int i = 0; i < m; ++i) {
		for (auto v : ::v[i])
		Moy(1, 0, m, 0, v, 1);
		ans = max(ans, Qry(1, 0, m, i + 1, m) - i);
	}
	printf("%d\n", ans);
	return 0;
}