#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <queue>
#include <algorithm>
#define R register
#define IN inline
#define W while
#define gc getchar()
#define MX 200500
template <class T>
IN void in(T &x)
{
	x = 0; R char c = gc;
	for (; !isdigit(c); c = gc);
	for (;  isdigit(c); c = gc)
	x = (x << 1) + (x << 3) + c - 48;
}
int n, m, low, hig, rcnt, ans;
int buf[MX];
struct INFO {int l, r;} dat[MX];
IN bool operator < (const INFO &x, const INFO &y) {return x.l == y.l ? x.r > y.r : x.l < y.l;}
std::priority_queue <int, std::vector <int>, std::greater <int> > pq;
int main(void)
{
	in(n), in(m);
	low = 1, hig = m;
	for (R int i = 1; i <= n; ++i) in(dat[i].l), in(dat[i].r);
	std::sort(dat + 1, dat + 1 + n);
	for (R int i = 1; i <= n; ++i)
	{
		pq.push(dat[i].r);
		if (low <= dat[i].l) ++low;
		else
		{
			buf[++rcnt] = pq.top();
			pq.pop();
		}
	}
	std::sort(buf + 1, buf + 1 + rcnt);
	for (R int i = rcnt; i; --i)
	{
		if (hig >= buf[i] && hig >= low) --hig;
		else ++ans;
	}
	printf("%d", ans);
}
