# include <iostream>
# include <algorithm>
# include <queue>
using namespace std;
const int N=200006;
struct node
{
	int l,r;
}a[N];
priority_queue < int,vector <int>,greater <int> > b;
int n,m,s;
int comp (node p,node q)
{
	if (p.l<q.l)
	return 1;
else if (p.l==q.l)
    if (p.r>q.r)
    return 1;
else return 0;
else return 0;
}
void work (void)
{
	int i,j,t;
	i=1;
	t=0;
	while (a[i].l==0&&i<=n)
	i++;
	for (j=1;j<i;j++)
	b.push (a[1].r);
	for (j=1;j<=m;j++)
	{
		while (a[i].l<j&&i<=n)
		{
			b.push (a[i].r);
			i++;
		}
		if (i<=n)
		{
			i++;
			t++;
			if (t==n)
			break;
		}
   else if (b.top ()<=j&&b.empty ()==0)
        {
        	b.pop ();
        	t++;
			if (t==n)
			break;
		}
	}
	s=n-t;
	cout<<s;
}
int main (void)
{
	int i;
	cin>>n>>m;
	for (i=1;i<=n;i++)
	cin>>a[i].l>>a[i].r;
	sort (a+1,a+n+1,comp);
	work ();
	return 0;
}
