#include <cstdio>
#include <algorithm>
std::pair < int, int > p[200001];
int N, M, O, S[524288], T[524288];
inline void up(int p)
{
	S[p] = S[p << 1] + S[p << 1 | 1];
	T[p] = std::min(T[p << 1], S[p << 1] + T[p << 1 | 1]);
}
void build(int p, int l, int r)
{
	if (l == r)
	{
		S[p] = l == 0 ? 0 : 1;
		T[p] = 0;
		return;
	}
	int m = l + r >> 1;
	build(p << 1, l, m);
	build(p << 1 | 1, m + 1, r);
	up(p);
}
void P(int x, int w)
{
	int p = 1, l = 0, r = M;
	while (l < r)
	{
		int m = l + r >> 1;
		if (x <= m)
			p <<= 1, r = m;
		else
			p = p << 1 | 1, l = m + 1;
	}
	T[p] = std::min(0, S[p] += w);
	while (p >>= 1)
		up(p);
}
int main()
{
	scanf("%d%d", &N, &M);
	for (int i = 1; i <= N; i++)
	{
		scanf("%d%d", &p[i].first, &p[i].second);
		p[i].second = M + 1 - p[i].second;
	}
	std::sort(p + 1, p + N + 1);
	build(1, 0, M);
	for (int i = 1; i <= N; i++)
	{
		P(p[i].second, -1);
		O = std::min(O, T[1] + p[i].first);
	}
	printf("%d\n", std::max(-O, N - M));
	return 0;
}