#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
struct People
{
	int l,r;
	bool operator<(const People &p)const
	{
		return r>p.r;
	}
}p[202020];
struct Node
{
	Node *lch,*rch;
	int l,r;
	int ma,lz;
}*rt;
void add(Node *x,int v)
{
	x->ma+=v;
	x->lz+=v;
}
void down(Node *x)
{
	if(x->lz)
	{
		add(x->lch,x->lz);
		add(x->rch,x->lz);
		x->lz=0;
	}
}
void update(Node *x)
{
	x->ma=max(x->lch->ma,x->rch->ma);
}
Node *Build(int l,int r)
{
	Node *ret=new Node;
	ret->l=l;
	ret->r=r;
	ret->lz=0;
	if(l==r)
	{
		ret->ma=-l;
		ret->lch=ret->rch=NULL;
		return ret;
	}
	int mid=(l+r)>>1;
	ret->lch=Build(l,mid);
	ret->rch=Build(mid+1,r);
	update(ret);
	return ret;
}
void modify(Node *x,int l,int r)
{
	if(l<=x->l&&r>=x->r)
	{
		add(x,1);
		return ;
	}
	down(x);
	int mid=(x->l+x->r)>>1;
	if(l<=mid)
		modify(x->lch,l,r);
	if(mid<r)
		modify(x->rch,l,r);
	update(x);
}
int main()
{
	int n,m,now=1,ans=0;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		scanf("%d%d",&p[i].l,&p[i].r);
	sort(p+1,p+1+n);
	rt=Build(0,m);
	for(int i=m+1;i>=0;i--)
	{
		while(now<=n&&p[now].r==i)
		{
			modify(rt,p[now].l,m);
			now++;
		}
		ans=max(ans,rt->ma-m-1+i);
	}
	printf("%d",max(ans,n-m));
	return 0;
}