#include<cstdio>
#include<algorithm>
#include<queue>
const int MAXN = 2e5 + 5;
using namespace std;

struct Node
{
	int l,r;
	friend bool operator < (const Node &a,const Node &b){ return a.r>b.r;}
}a[MAXN],b[MAXN];
int bcnt=0;
inline bool cmp(Node a,Node b){ return a.l<b.l;}

bool vis[MAXN];
priority_queue<Node> q;

int main(void)
{
	int n,m;
	scanf("%d%d",&n,&m);
	for(int i=1; i<=n; ++i) scanf("%d%d",&a[i].l,&a[i].r);
	
	sort(a+1,a+n+1,cmp);
	for(int i=1, cnt=0; i<=n; ++i)
	{
		q.push(a[i]);
		if(cnt >= a[i].l)
			b[++bcnt] = q.top(),
			q.pop();
		else
		{
			++cnt;
			if(cnt>m)
			{
				for(; i<=m; ++i) b[++bcnt]=a[i];
				break;
			}
			vis[cnt]=1;
		}
	}
	
	sort(b+1,b+bcnt+1);
	int ans=0;
	for(int i=1, cnt=0; i<=bcnt; ++i)
	{
		if(cnt > m-b[i].r) ++ans;
		else
		{
			++cnt;
			if(vis[m-cnt+1] || m-cnt+1 < 1)
			{
				ans += bcnt-i+1;
				break;
			}
			vis[m-cnt+1]=1;
		}
	}
	
	printf("%d",ans);
	return 0;
}