#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+10,M=5,INF=1e12;
int n,k,ans=INF;
struct Spot{
int x,y;
bool operator<(const Spot &B)const{
return x<B.x||(x==B.x&&y>B.y);
}
}s[N];
struct Square{
Spot l,r;
bool tag;
void add(int i){
if(tag==0){
l=r=s[i];
tag=1;
return;
}
int x=s[i].x,y=s[i].y;
if(y>r.y) r.x=x,r.y=y;
else if(y<l.y) l.y=y,r.x=x;
else r.x=x;
}
int area(){
return abs((r.x-l.x)*(r.y-l.y));
}
}sq[M];
bool chk(Square A,Square B){//Not Cross
return B.l.x>A.r.x||B.l.y>A.r.y||B.r.x<A.l.x||B.r.y<A.l.y;
}
void dfs(int i,int sum){
// printf("* %d %d\n",i-1,sum);
// for(int j=1;j<=k;++j){
// printf("(%d,%d) (%d,%d)\n",sq[j].l.x,sq[j].l.y,sq[j].r.x,sq[j].r.y);
// }
if(sum>=ans) return;
if(i>n){
ans=min(ans,sum);
return;
}
for(int j=1;j<=k;++j){
int s0=sq[j].area();
Square sq0=sq[j];
sq[j].add(i);
int flag=0;
for(int w=1;w<=k;++w)
if(w!=j&&!chk(sq[w],sq[j])&&sq[w].tag)
flag=1;
if(flag) continue;
int s1=sq[j].area();
dfs(i+1,sum+s1-s0);
sq[j]=sq0;
}
}
signed main(){
cin>>n>>k;
for(int i=1;i<=n;++i) cin>>s[i].y>>s[i].x;
sort(s+1,s+n+1);
// cout<<'\n';
// for(int i=1;i<=n;++i){
// cout<<s[i].x<<' '<<s[i].y<<'\n';
// }
// cout<<'\n';
dfs(1,0);
cout<<ans;
return 0;
}
交换了 x,y 更方便调试, 中间的 sum 出现了负数,感觉很诡异 qwq