#include<bits/stdc++.h>
#define N 200005
#define L(__) (__ << 1)
#define R(__) (L(__)|1)
#define oo (1<<30)
using namespace std;
vector<int> G[N];
int n,m,l[N],r[N],sz[4*N],Max[4*N],ans,T[4*N];
void build(int t,int l,int r)
{
	int mid=(l+r)>>1;
	if(l==r){ Max[t]=-l; return ;}
	build(L(t),l,mid);
	build(R(t),mid+1,r);
	Max[t]=max(Max[L(t)],Max[R(t)]);
}
void AD(int t,int d){ Max[t]+=d,T[t]+=d;}
void push(int t)
{
	if(!T[t]) return ;
	AD(L(t),T[t]);
	AD(R(t),T[t]);
	T[t]=0;
}
void M(int t,int l,int r,int l1,int r1)
{
	int mid=(l+r)>>1;
	if(l>r1 || r<l1) return ;
	if(l>=l1&&r<=r1) return AD(t,1);
	push(t);
	M(L(t),l,mid,l1,r1);
	M(R(t),mid+1,r,l1,r1);
	Max[t]=max(Max[L(t)],Max[R(t)]);
}
int main()
{
	int i,j;
	scanf("%d %d",&n,&m);
	for(i=1;i<=n;i++){
		scanf("%d %d",&l[i],&r[i]),r[i]=m-r[i]+1;
		G[l[i]].push_back(r[i]);
	  }
	ans=n-m;
	build(1,0,m);
	for(i=0;i<=m;i++){
		for(j=0;j<G[i].size();j++)
			M(1,0,m,G[i][j],m);
		ans=max(ans,Max[1]-i);
	  }
	cout<<ans;
	return 0;
}
