0pts
#include<bits/stdc++.h>
using namespace std;
int n,k,ans=INT_MAX;
bool mp[505][505];
bool res[55];
struct node{
int x,y;
}a[55];
bool cmp(node l,node r){
if(l.x!=r.x) return l.x<r.x;
return l.y<r.y;
}
bool check(int l,int r,int &last){
for(int i=min(a[r].x,a[l].x);i<=max(a[r].x,a[l].x);i++){
for(int j=min(a[r].y,a[l].y);j<=max(a[r].y,a[l].y);j++){
if(mp[i][j]) return 0;
}
}
for(int i=min(a[r].x,a[l].x);i<=max(a[r].x,a[l].x);i++){
for(int j=min(a[r].y,a[l].y);j<=max(a[r].y,a[l].y);j++){
mp[i][j]=1;
}
}
int lt=min(a[l].x,a[r].x),rt=min(a[r].y,a[l].y);
int lt2=max(a[l].x,a[r].x),rt2=max(a[r].y,a[l].y);
for(int i=1;i<=n;i++){
if(a[i].x<=lt2&&a[i].x>=lt&&a[i].y<=rt2&&a[i].y>=rt){
res[i]=1;
cout<<i<<" ";
last++;
}
}
cout<<'\n';
return 1;
}
void check2(int l,int r,int &last){
for(int i=min(a[r].x,a[l].x);i<=max(a[r].x,a[l].x);i++){
for(int j=min(a[r].y,a[l].y);j<=max(a[r].y,a[l].y);j++){
mp[i][j]=0;
}
}
int lt=min(a[l].x,a[r].x),rt=min(a[r].y,a[l].y);
int lt2=max(a[l].x,a[r].x),rt2=max(a[r].y,a[l].y);
for(int i=1;i<=n;i++){
if(a[i].x<=lt2&&a[i].x>=lt&&a[i].y<=rt2&&a[i].y>=rt){
res[i]=0;
last--;
}
}
}
void dfs(int now,int sum,int last){
if(now>k){
if(last!=n) return;
ans=min(ans,sum);
//cout<<"FUNCTION "<<sum<<'\n';
return;
}
for(int i=1;i<=n;i++){
if(res[i]) continue;
for(int j=1;j<=n;j++){
if(res[j]) continue;
//cout<<now<<" "<<last<<" "<<sum<<'\n';
if(check(i,j,last)) dfs(now+1,sum+abs(a[j].x-a[i].x)*abs(a[j].y-a[i].y),last);
else continue;
check2(i,j,last);
}
}
}
int main(){
cin>>n>>k;
if(k>=n) cout<<0,exit(0);
for(int i=1;i<=n;i++) cin>>a[i].x>>a[i].y;
//sort(a+1,a+1+n,cmp);
dfs(1,0,0);
cout<<ans;
return 0;
}