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>
using namespace std;
using ll = long long;
using P = pair<int,int>;
const ll INF = (ll)1e18 *4 +9;

int f(vector<int> v, int k){//ソート済みの配列からk個取る時の差の最小値を返す
  int n = v.size();
  int ans = v[k-1] - v[0];
  for(int i=k; i<n; ++i){
    ans = min(ans, v[i] - v[i-k+1]);
  }
  return ans;
}

int main(){
  int n, k;
  cin >> n >> k;
  vector<P> v(n);
  for(int i=0; i<n; ++i) cin >> v[i].first >> v[i].second;
  sort(v.begin(),v.end());
  ll ans = INF;
  for(int i=0; i<n-k+1; ++i){
    vector<int> v2;
    for(int i2=i; i2<i+k-1; ++i2) v2.push_back(v[i2].second);
    for(int j=i+k-1; j<n; ++j){
      int disx = v[j].first - v[i].first;
      v2.push_back(v[j].second);
      sort(v2.begin(),v2.end());
      int disy = f(v2,k);
      ans = min(ans, (ll)disx * disy);
    }
  }
  cout << ans << endl;
}