#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;

inline int getint()
{
	static char c;
	while ((c = getchar()) < '0' || c > '9');

	int res = c - '0';
	while ((c = getchar()) >= '0' && c <= '9')
		res = res * 10 + c - '0';
	return res;
}

const int MaxN = 200000;
const int MaxM = 200000;

int n, m;
vector<int> pos[MaxM + 1];

priority_queue<int, vector<int>, greater<int>> q;

int res = 0;
int num[MaxM + 2];

int main()
{
	cin >> n >> m;
	for (int i = 0; i < n; ++i)
	{
		int l = getint(), r = getint();
		pos[l].push_back(r);
	}

	for (int k : pos[0])
		++num[k];
	for (int i = 1; i <= m; ++i)
	{
		for (int k : pos[i])
		{
			q.push(k);
			if (q.size() > i)
				++num[q.top()], q.pop();
		}
	}

	int r = m + 1;
	for (int i = m; i; --i)
		for (int k = 0; k < num[i]; ++k)
			r - 1 > q.size() && r > i ? --r : ++res;

	cout << res + num[m + 1] << endl;

	return 0;
}