Problem: We have N points in a two-dimensional plane.
The coordinates of the i-th point (1 \leq i \leq N) are (x_i,y_i).
Let us consider a rectangle whose sides are parallel to the coordinate axes that contains K or more of the N points in its interior.
Here, points on the sides of the rectangle are considered to be in the interior.
Find the minimum possible area of such a rectangle.

Constraints

* 2 \leq K \leq N \leq 50
* -10^9 \leq x_i,y_i \leq 10^9 (1 \leq i \leq N)
* x_i≠x_j (1 \leq i<j \leq N)
* y_i≠y_j (1 \leq i<j \leq N)
* All input values are integers. (Added at 21:50 JST)

Input

Input is given from Standard Input in the following format:


N K
x_1 y_1
:
x_{N} y_{N}


Output

Print the minimum possible area of a rectangle that satisfies the condition.

Examples

Input

4 4
1 4
3 3
6 2
8 1


Output

21


Input

4 2
0 0
1 1
2 2
3 3


Output

1


Input

4 3
-1000000000 -1000000000
1000000000 1000000000
-999999999 999999999
999999999 -999999999


Output

3999999996000000001

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
#include <stdio.h>
using namespace std;

#define INF 1.1e9
#define LINF 9223372036854775807
#define FOR(i,a,b) for (int i = (a); i < (b); ++i)
#define REP(i,n) FOR(i,0,n)
#define ALL(v) (v).begin(), (v).end()

typedef long long ll;
typedef pair<ll, ll> P;

int K,N;
ll x[50],y[50];
vector<ll> vx,vy;

int main(){
	cin.tie(0);
	ios::sync_with_stdio(false);

	cin>>N>>K;
	REP(i,N) {
		cin>>x[i]>>y[i];
		vx.push_back(x[i]);
		vy.push_back(y[i]);
	}
	sort(ALL(vx)); sort(ALL(vy));
	ll ans=(vx[N-1]-vx[0])*(vy[N-1]-vy[0]);
	REP(i,N) {
		FOR(j,i+1,N) {
			REP(k,N) {
				FOR(l,k+1,N) {
					int cnt=0;
					REP(m,N) {
						if(x[m]>=vx[i]&&x[m]<=vx[j]&&y[m]>=vy[k]&&y[m]<=vy[l]) cnt++;
					}
					if(cnt>=K) ans=min(ans,(vx[j]-vx[i])*(vy[l]-vy[k]));
				}
			}
		}
	}
	cout<<ans<<endl;

	return 0;
}