// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

#define ll unsigned long long



struct ac{

    int x, y;

}a[55], d[55];



int cmp1(ac b, ac c)

{

    return b.x < c.x;

}



int cmp2(ac b, ac c)

{

    return b.y<c.y;

}



int sl(int x1,int y1,int x2,int y2,int i)

{

    int xl = min(x1, x2), xr = max(x1, x2);

    int yl = min(y1, y2), yr = max(y1, y2);

    if(a[i].x >= xl && a[i].x <= xr && a[i].y >= yl && a[i].y <= yr)

    {

        return 1;

    }

    return 0;

}



int main()

{

    ll maxx = 1ll*10e9*10e9*4+2;

    int n, k1;

    cin >> n >> k1;

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

    {

        cin >> a[i].x >> a[i].y;

        d[i].x = a[i].x, d[i].y = a[i].y;

    }

    sort(a+1, a+1+n,cmp1);

    sort(d+1, d+n+1,cmp2);

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

    {

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

        {

            for(int k = 1; k <= n; k++)

            {

                for(int l = k+1; l <= n; l++)

                {

                    int flag = 0;

                    for(int u = 1; u <= n; u++)

                    {

                        if(sl(a[i].x,d[k].y,a[j].x,d[l].y,u))

                        {

                            flag++;

                        }

                    }

                    if(flag >= k1)

                    {

                        maxx = min(maxx, (ll)abs(1ll*a[i].x-1ll*a[j].x)*abs(1ll*d[k].y-1ll*d[l].y));

                    }

                }

            }

        }



    }

   cout << maxx << endl;

    return 0;

}


// Faster C++ solution for the same problem (measured speedup: 4.754382513930604x):
#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);

}