# include <iostream>
# include <sstream>
# include <cstdio>
# include <cstdlib>
# include <algorithm>
# include <string>
# include <cstring>
# include <cmath>
# include <stack>
# include <queue>
# include <vector>
# include <list>
# include <map>
# include <set>
# include <deque>
# include <iterator>
# include <functional>
# include <bitset>
# include <climits>
# include <ctime>
using namespace std;
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define odd(x) ((x)&1)
#define sqr(x) ((x)*(x))
#define mp make_pair
#define pb push_back
#define fir first
#define sec second
#define all(x) (x).begin(),(x).end()
#define mem(a,x) memset(a,x,sizeof(a))
#define rep(i,a,b) for (int i=(a); i<=(b); ++i)
#define per(i,a,b) for (int i=(a); i>=(b); --i)
#define rep_it(it,x) for (__typeof((x).begin()) it=(x).begin(); it!=(x).end(); it++)
#define ____ puts("\n_______________\n\n")
#define debug(x) ____; cout<< #x << " => " << (x) << endl
#define debug_pair(x) cout<<"\n{ "<<(x).fir<<" , "<<(x).sec<<" }\n"
#define debug_arr(x,n) ____; cout<<#x<<":\n"; rep(i,0,n) cout<<#x<<"["<<(i)<<"] => "<<x[i]<<endl
#define debug_arr2(x,n,m) ____; cout<<#x<<":\n"; rep(i,0,n) rep(j,0,m) cout<<#x<<"["<<(i)<<"]["<<(j)<<"]= "<<x[i][j]<<((j==m)?"\n\n":"    ")
#define debug_set(x) ____; cout<<#x<<": \n"; rep_it(it,x) cout<<(*it)<<" "; cout<<endl
#define debug_map(x) ____; cout<<#x<<": \n"; rep_it(it,x) debug_pair(*it)
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pii;
typedef vector<int> vi;
const int oo = /*2 * 1000 * 1000 * 1000*/0x3f3f3f3f;
const ll ooo=9223372036854775807ll;
const int _cnt = 1000 * 1000 + 7;
//const int _p = 1000 * 1000 * 1000 + 7;
const int _p=1000003;
const int N=301005;
const double PI=acos(-1.0);
const double eps=1e-9;
int o(int x) { return x%_p; }
int gcd(int a, int b) { return b ? gcd(b, a%b) : a; }
int lcm(int a, int b) { return a / gcd(a, b)*b; }

void file_put() {
    freopen("filename.in", "r", stdin);
    freopen("filename.out", "w", stdout);
}

struct ttype{
    int x,y;
};

int n,k;
map <int,int> X,Y;
map <int,int>::iterator it;
ttype p[55];
int xx[55],yy[55],numx[55],numy[55];
int s[55],x,y;
ll ans=ooo;

bool cmp(const ttype &p,const ttype &q) {
    return p.x<q.x || p.x==q.x && p.y<q.y;
}

int main() {
    //file_put();

    scanf("%d%d",&n,&k);
    rep(i,1,n) {
        scanf("%d%d",&x,&y);
        p[i].x=x;
        p[i].y=y;
    }
    sort(p+1,p+n+1,cmp);
    rep(i,1,n) X[p[i].x]++,Y[p[i].y]++;
    int tot=0;
    for (it=X.begin(); it!=X.end(); it++) {
        xx[++tot]=it->first;
        numx[tot]=it->second;
    }
    int toty=0;
    for (it=Y.begin(); it!=Y.end(); it++) {
        yy[++toty]=it->first;
        numy[toty]=it->second;
    }
    rep(i,1,toty) s[i]=s[i-1]+numy[i];
    rep(i,1,tot) rep(j,i,tot) {
        Y.clear();
        rep(kk,i,j) Y[p[kk].y]++;
        int toty=0;
        for (it=Y.begin(); it!=Y.end(); it++) {
            yy[++toty]=it->first;
            numy[toty]=it->second;
        }
        s[0]=0;
        rep(i,1,toty) s[i]=s[i-1]+numy[i];
        int a=1,b=1;
        while (a<=toty){
            while (s[b]-s[a-1]<k && b<=toty) b++;
            if (b>toty) {
                a++;
                continue;
            }
            int tt=yy[b]-yy[a];
            ans=min(ans,(ll)tt*(xx[j]-xx[i]));
            a++;
        }
    }
    printf("%lld\n",ans);

    return 0;
}


Measured memory_bytes: 256