#include <algorithm>
#include <cstdio>
using namespace std;
const int N=200005;
int t[N*4],tg[N*4],n,m;
struct info{int l,r;}a[N];
bool cmp(info a,info b){
	return a.l<b.l;
}
void build(int k,int l,int r){
	if (l==r){
		t[k]=r-m-1;return;
	}
	int mid=(l+r)>>1;
	build(k<<1,l,mid);
	build(k<<1|1,mid+1,r);
	t[k]=max(t[k<<1],t[k<<1|1]);
}
void add(int k,int x){t[k]+=x;tg[k]+=x;}
void pushdown(int k){
	if (tg[k])
		add(k<<1,tg[k]),add(k<<1|1,tg[k]),tg[k]=0;
}
void modify(int k,int l,int r,int x){
	if (r<=x){add(k,1);return;}
	int mid=(l+r)>>1;pushdown(k);
	modify(k<<1,l,mid,x);
	if (x>mid) modify(k<<1|1,mid+1,r,x);
	t[k]=max(t[k<<1],t[k<<1|1]);
}
int query(int k,int l,int r,int x){
	if (x<=l) return t[k];
	pushdown(k);
	int mid=(l+r)>>1,y=query(k<<1|1,mid+1,r,x);
	if (x<=mid) y=max(y,query(k<<1,l,mid,x));
	t[k]=max(t[k<<1],t[k<<1|1]);
	return y;
}
int main(){
	scanf("%d%d\n",&n,&m);
	for (int i=1;i<=n;i++) scanf("%d%d\n",&a[i].l,&a[i].r);
	std::sort(a+1,a+n+1,cmp);
	build(1,1,m+1);
	int ans=max(0,n-m);
	for (int i=0,j=1;i<=m && j<=n;i++){
		for (;j<=n && a[j].l==i;j++) modify(1,1,m+1,a[j].r);
		ans=max(ans,query(1,1,m+1,i+1)-i);
	}
	printf("%d\n",ans);
}