#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 200005
using namespace std;
struct P{
	int l,r;
}a[N];
struct trie{
	int mx,add;
}t[N<<2];
int n,m;
bool cmp(P a,P b){
	return a.l<b.l;
}
void pwd(int k,int l,int r){
	if(l==r) return;
	l=k<<1,r=k<<1|1;
	if(t[k].add){
		t[l].add+=t[k].add;
		t[r].add+=t[k].add;
		t[l].mx+=t[k].add;
		t[r].mx+=t[k].add;
		t[k].add=0;
	}
}
void update(int k,int l,int r,int L,int R,int val){
	pwd(k,l,r);
	if(L<=l&&R>=r){
		t[k].add+=val;
		t[k].mx+=val;
		return;
	}
	int mid=l+r>>1;
	if(L<=mid) update(k<<1,l,mid,L,R,val);
	if(R>mid) update(k<<1|1,mid+1,r,L,R,val);
	t[k].mx=max(t[k<<1].mx,t[k<<1|1].mx);
}
void build(int k,int l,int r){
	if(l==r){
		t[k].mx=l-m;
		return;
	}
	int mid=l+r>>1;
	build(k<<1,l,mid);
	build(k<<1|1,mid+1,r);
	t[k].mx=max(t[k<<1].mx,t[k<<1|1].mx);
}
int main(){
	scanf("%d%d",&n,&m);
	m++;
	for(int i=1;i<=n;i++) scanf("%d%d",&a[i].l,&a[i].r);
	sort(a+1,a+n+1,cmp);
	build(1,0,m);
	int ans=0;
	for(int i=0,p=0;i<=m;i++){
		update(1,0,m,0,i,1);
		while(p<n&&a[p+1].l==i) p++,update(1,0,m,0,a[p].r,1);
		ans=max(ans,t[1].mx-i);
	}
	printf("%d",ans);
	return 0;
}