#include <bits/stdc++.h>
using namespace std;
const int maxn = 100 + 5;
int n, k, ans = 250000 + 5, px[maxn], py[maxn];
struct mat {
int lx, ly, rx, ry;
int flag;
} mt[10];
int check() {
for (int i = 1; i <= k; ++ i)
for (int j = i + 1; j <= k; ++ j) {
if (mt[i].lx >= mt[j].lx && mt[i].lx <= mt[j].rx && mt[i].ly <= mt[j].ry && mt[i].ly >= mt[j].ly) return 0;
else if (mt[i].lx >= mt[j].lx && mt[i].lx <= mt[j].rx && mt[i].ry <= mt[j].ry && mt[i].ry >= mt[j].ly) return 0;
else if (mt[i].rx >= mt[j].lx && mt[i].rx <= mt[j].rx && mt[i].ry <= mt[j].ry && mt[i].ry >= mt[j].ly) return 0;
else if (mt[i].rx >= mt[j].lx && mt[i].rx <= mt[j].rx && mt[i].ly <= mt[j].ry && mt[i].ly >= mt[j].ly) return 0;
}
return 1;
}
void add(int i, int id) {
if (!mt[i].flag) {
mt[i].flag = 1;
mt[i].lx = mt[i].rx = px[id];
mt[i].ly = mt[i].ry = py[id];
}
else {
if (px[id] < mt[i].lx) mt[i].lx = px[id];
else if (px[id] > mt[i].rx) mt[i].rx = px[id];
if (py[id] < mt[i].ly) mt[i].ly = py[id];
else if (py[id] > mt[i].ry) mt[i].ry = py[id];
}
}
int clac(mat a) {
if (!a.flag) return 0;
return (a.rx - a.lx) * (a.ry - a.ly);
}
void dfs(int id, int sqa) {
if (sqa > ans) return ;
if (id == n + 1) {
if (check())
if (ans > sqa) {
ans = sqa; return ;
}
}
mat kpl;
for (int i = 1; i <= k; ++ i) {
kpl = mt[i];
add(i, id);
dfs(id + 1, sqa - clac(kpl) + clac(mt[i]));
mt[i] = kpl;
}
}
void read() {
scanf("%d%d", &n, &k);
for (int i = 1; i <= n; ++ i)
scanf("%d%d", &py[i], &px[i]);
dfs(1, 0);
printf("%d\n", ans);
}
int main() {
read();
return 0;
}
/*
4 2
0 1
1 3
2 0
3 2
*/