#include <cstdio>
#include <algorithm>
#include <set>
using namespace std;
struct Info{
	int l, r;
	inline bool operator <(const Info &x) const {
		return r == x.r ? l < x.l : r > x.r;
	}
}tk[200007];
multiset<Info> S;
multiset<Info>::iterator it;
inline bool Cmp(const Info &a, const Info &b){
	return a.l == b.l ? a.r < b.r : a.l > b.l;
}
int fastin(){
	register int i; register char ch;
	while (ch = getchar(), ch < '0' || ch > '9');
	i = ch - '0';
	while (ch = getchar(), ch >= '0' && ch <= '9') i = i * 10 + ch - '0';
	return i;
}
int main(){
	register int n, m, i, t, lim, ans, cnt;
	n = fastin(), m = fastin();
	for (i = 1; i <= n; ++i) {
		tk[i].l = fastin();
		tk[i].r = fastin();
	}
	sort(tk + 1, tk + n + 1, Cmp);
	t = tk[1].l;
	lim = 0;
	for (i = 1; t; --t) {
		while (i <= n && tk[i].l >= t) S.insert(tk[i++]);
		if (S.size()) {
			S.erase(S.begin());
			++lim;
		}
	}
	cnt = 0;
	for (; i <= n; ++i) tk[++cnt] = tk[i];
	for (it = S.begin(); it != S.end(); ++it) tk[++cnt] = *it;
	if (cnt == 0) {
		puts("0");
		return 0;
	}
	sort(tk + 1, tk + cnt + 1);
	ans = 0;
	for (t = m, i = 1; i <= cnt && t > lim; ++i) {
		if (tk[i].r <= t) --t;
		else ++ans;
	}
	if (i <= cnt) ans += cnt - i + 1;
	printf("%d\n", ans);
	return 0;
}