#include<bits/stdc++.h>
using namespace std;
const int N=200010;
inline int read()
{
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9')
c=='-'?f=-1:1,c=getchar();
while(c>='0'&&c<='9')
x=(x<<1)+(x<<3)+c-'0',c=getchar();
return x*f;
}
int n,m;
struct node{
int l,r;
}a[N];
inline bool cmp(node a1,node a2)
{
return a1.r<a2.r;
}
struct tree{
int l,r;
int key,size,val;
}t[N];
int idx,root;
inline void pushup(int p)
{
t[p].size=t[t[p].l].size+t[t[p].r].size+1;
}
inline int cnode(int x)
{
t[++idx].key=x;
t[idx].size=1;
t[idx].val=rand();
return idx;
}
inline void fl(int p,int v,int &x,int &y)
{
if(!p)
{
x=y=0;
return ;
}
if(t[p].key<=v)
{
x=p;
fl(t[p].r,v,t[p].r,y);
}
else
{
y=p;
fl(t[p].l,v,x,t[p].l);
}
pushup(p);
}
inline int hb(int x,int y)
{
if(!x||!y)
return x+y;
if(t[x].val<t[y].val)
{
t[x].r=hb(t[x].r,y);
pushup(x);
return x;
}
else
{
t[y].l=hb(x,t[y].l);
pushup(y);
return y;
}
}
inline void insert(int v)
{
int x,y,z;
fl(root,v,x,y);
z=cnode(v);
root=hb(hb(x,z),y);
}
inline void dlt(int v)
{
int x,y,z;
fl(root,v,x,y);
fl(x,v-1,x,z);
z=hb(t[z].l,t[z].r);
root=hb(hb(x,z),y);
}
inline int qk(int p,int k)
{
if(!p)
return 0;
if(t[t[p].l].size>=k)
return qk(t[p].l,k);
if(t[t[p].l].size+1==k)
return p;
return qk(t[p].r,k-t[t[p].l].size-1);
}
inline int qfront(int v)
{
int x,y,p;
fl(root,v-1,x,y);
p=qk(x,t[x].size);
root=hb(x,y);
return p;
}
int p,ans;
int main()
{
n=read(),m=read();
if(m>=n)
{
printf("0");
return 0;
}
for(int i=1;i<=n;i++)
a[i]={read(),read()};
sort(a+1,a+n+1,cmp);
for(int i=1;i<=m;i++)
insert(a[i].r);
for(int i=m+1;i<=n;i++)
{
p=qfront(a[i].l+1);
if(!p)
{
ans++;
continue;
}
dlt(t[p].key);
insert(a[i].r);
}
printf("%d",ans);
return 0;
}