// Original C++ solution (slower):
//    https://youtu.be/N3oCS85HvpY



#include<bits/stdc++.h>

using namespace std;



typedef long long ll;

typedef long double ld;

typedef long long unsigned llu;

typedef pair<long long, long long> pll;

const long long inf = 2000000000000000000LL;	// 2e18

#define pi                  acos(-1.0)

#define fast                ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0)

#define shesh               "\n"

#define ff                  first

#define ss                  second

#define pb                  push_back

#define bp                  pop_back

#define pf                  push_front

#define fp                  pop_front

#define ub                  upper_bound

#define lb                  lower_bound

#define all(x)              x.begin(), x.end()

#define debug(x)            cout<<"debug "<<x<<"\n"

#define mest(a,b)           memset(a,b,sizeof(a))



int main()

{

    fast;

    llu ans=5000000000000000000;

    ll t,n,m,i,j,l,k,temp,flag,x,y,x1,x2,y1,y2;

    cin>>n>>k;

    vector<pair<ll,ll> >v;

    vector<ll>X,Y;

    for(i=0; i<n; i++)

    {

        cin>>x>>y;

        v.pb({x,y});

        X.pb(x);

        Y.pb(y);

    }

//    sort(all(X));

//    sort(all(Y));

    for(j=0; j<n; j++)

    {

        for(x=j+1; x<n; x++)

        {

            for(y=0; y<n; y++)

            {

                for(t=y+1,temp=0; t<n; t++)

                {

                    x1=min(X[j],X[x]);

                    x2=max(X[j],X[x]);

                    y1=min(Y[y],Y[t]);

                    y2=max(Y[y],Y[t]);

                    for(l=0,temp=0; l<n; l++)

                    {

                        if(v[l].ff>=x1 && v[l].ff<=x2 && v[l].ss>=y1 && v[l].ss<=y2)

                            temp++;

                    }

                    if(temp>=k)

                    {

                        if(ans>((llu)abs(x1-x2))*((llu)abs(y1-y2)))

                            ans=((llu)abs(x1-x2))*((llu)abs(y1-y2));

                    }

                }

            }

        }

    }

    cout<<ans;

    return 0;

}


// Optimized solution to the same problem (faster):
#include<stdio.h>

#include<stdlib.h>

struct node

{

	long long x,y;

	int a,b;

}point[55];

int incx(const void *a, const void *b)

{

    struct node m = *(struct node *)a;

    struct node n = *(struct node *)b;

    if(m.x<n.x) return -1;

    else return 1;

}

int incy(const void *a, const void *b)

{

    struct node m = *(struct node *)a;

    struct node n = *(struct node *)b;

    if(m.y<n.y) return -1;

    else return 1;

}

int main()

{

	int n,k,mp[55][55],xmax,ymax,temp;

	bool np[55][55];

	long long x[55],y[55],S,min=-1,xx[55],yy[55],Smax=-1;

	for(int i=0;i<55;i++)

	{

		for(int j=0;j<55;j++)

		{

			mp[i][j]=0;

			np[i][j]=false;

		}

	}

	scanf("%d%d",&n,&k);

	for(int i=0;i<n;i++)scanf("%lld%lld",&point[i].x,&point[i].y);

	qsort(point,n,sizeof(struct node),incx);

	temp=0;

	for(int i=0;i<n;i++)

	{

		point[i].a=temp;

		xx[temp]=point[i].x;

		temp++;

	}

	qsort(point,n,sizeof(struct node),incy);

	temp=0;

	for(int i=0;i<n;i++)

	{

		point[i].b=temp;

		np[point[i].a][point[i].b]=true;

		yy[temp]=point[i].y;

		temp++;

	}

	if(np[0][0]==false)mp[0][0]=0;

	else mp[0][0]=1;

	for(int i=0;i<n;i++)

	{

		for(int j=0;j<n;j++)

		{

			if(i==0)mp[i][j]=mp[i][j-1]+np[i][j];

			else if(j==0)mp[i][j]=mp[i-1][j]+np[i][j];

			else mp[i][j]=mp[i-1][j]+mp[i][j-1]-mp[i-1][j-1]+np[i][j];

		}

	}

	for(int i=0;i<n;i++)

	{

		for(int j=0;j<n;j++)

		{

			for(int p=i+1;p<n;p++)

			{

				for(int q=j+1;q<n;q++)

				{

					int sum;

					if(i==0)sum=mp[p][q]-mp[p][j-1];

					else if(j==0)sum=mp[p][q]-mp[i-1][q];

					else sum=mp[p][q]-mp[i-1][q]-mp[p][j-1]+mp[i-1][j-1];

					if(sum>=k)

					{

						if((xx[p]-xx[i])*(yy[q]-yy[j])<=Smax||Smax<0)Smax=(xx[p]-xx[i])*(yy[q]-yy[j]);

					}

				}

			}

		}

	}

	printf("%lld\n",Smax);

}

// Fastest known solution for this problem: