#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
//英语 看博友分析 抄博友程序 并查集
struct nod{
int x;
int y;
int id;
};
bool cmp1(nod a, nod b)
{
if(a.x==b.x)
{
return a.y<b.y;
}else
{
return a.x<b.x;
}
}
bool cmp2(nod a,nod b)
{
if(a.y==b.y)
{
return a.x<b.x;
}else
{
return a.y<b.y;
}
}
nod da[16008];
int hs[16008];
int fa[16008];
int find(int x)
{
if(fa[x]==-1)
{
return x;
}else
{
return fa[x]=find(fa[x]);
}
}
int main()
{
memset(fa,-1,sizeof(fa));
int n,k;
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
{
cin>>da[i].x>>da[i].y;
da[i].id=i;
}
sort(da+1,da+n+1,cmp1);
for(int i=1;i<n;i++)
{
if(da[i].x==da[i+1].x && (da[i].y+1)==da[i+1].y)
{
if(find(da[i].id)!=find(da[i+1].id))
{
fa[find(da[i].id)]=find(da[i+1].id);
}
}
}
sort(da+1,da+n+1,cmp2);
for(int i=1;i<n;i++)
{
if(da[i].y==da[i+1].y && (da[i].x+1)==da[i+1].x)
{
if(find(da[i].id)!=find(da[i+1].id))
{
fa[find(da[i].id)]=find(da[i+1].id);
}
}
}
for(int i=1;i<=n;i++)
{
hs[find(i)]++;
}
sort(hs+1,hs+n+1);
int jg=0;
for(int i=n;i>n-k;i--)
{
jg=hs[i]+jg;
}
cout<<jg<<endl;
return 0;
}