#include <bits/stdc++.h>
#define ls (x<<1)
#define rs (x<<1|1)
const int N=200050;
using namespace std;
int gi(){
  char ch=getchar(); int x=0,q=0;
  while(ch<'0' || ch>'9') (ch=='-'?q=1:0),ch=getchar();
  while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();
  return q?(-x):x;
}
int tr[N<<2],laz[N<<2],n,m;
struct date{
  int l,r;
  bool operator < (const date &c) const {
    return l<c.l;
  }
}p[N];
int Max(int a,int b){
  return a>b?a:b;
}
void update(int x){
  tr[x]=Max(tr[ls],tr[rs]);
  return;
}
void down(int x){
  tr[ls]+=laz[x],laz[ls]+=laz[x];
  tr[rs]+=laz[x],laz[rs]+=laz[x];
  laz[x]=0; return;
}
void build(int x,int l,int r){
  if (l==r){
    tr[x]=l-m; return;
  }
  int mid=(l+r)>>1;
  build(ls,l,mid),build(rs,mid+1,r);
  return update(x);
}
void Update(int x,int l,int r,int ql,int qr){
  if (ql<=l&&r<=qr) {
    ++tr[x],++laz[x]; return;
  }
  int mid=(l+r)>>1;
  if (laz[x]) down(x);
  if (ql<=mid) Update(ls,l,mid,ql,qr);
  if (qr>mid) Update(rs,mid+1,r,ql,qr);
  return update(x);
}
int main(){
  n=gi(),m=gi()+2;
  for (int i=1; i<=n; ++i)
    p[i]=(date){gi()+1,gi()+1};
  build(1,1,m);
  sort(p+1,p+n+1);
  int ans=0,id=1;
  for (int i=1; i<=m; ++i){
    for ( ; id<=n&&p[id].l==i; ++id)
      Update(1,1,m,1,p[id].r);
    Update(1,1,m,1,i);
    ans=Max(ans,tr[1]-i+1);
  }
  cout<<ans;
  return 0;
}
