#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
const int INF = 2e9 + 9;
int n, k;
struct IT {
  int a[N];
  int Min[N << 2], Max[N << 2];
  int idMin[N << 2], idMax[N << 2];
  bool active[N];
  inline void gather(const int k) {
    Min[k] = Min[k << 1];
    idMin[k] = idMin[k << 1];
    if (Min[k] > Min[k << 1 | 1])
      Min[k] = Min[k << 1 | 1], idMin[k] = idMin[k << 1 | 1];
    Max[k] = Max[k << 1];
    idMax[k] = idMax[k << 1];
    if (Max[k] < Max[k << 1 | 1])
      Max[k] = Max[k << 1 | 1], idMax[k] = idMax[k << 1 | 1];
  }
  inline void update(const int k, const int l, const int r, const int i) {
    if (l == r) {
      if (active[l])
        Min[k] = INF, Max[k] = 0;
      else
        Min[k] = Max[k] = a[l];
      idMin[k] = idMax[k] = l;
      active[l] ^= 1;
      return;
    }
    int mid = l + r >> 1;
    if (i <= mid)
      update(k << 1, l, mid, i);
    else
      update(k << 1 | 1, mid + 1, r, i);
    gather(k);
  }
} X, Y;
int x, y;
long long ans = 2e18;
void backtrack(int i) {
  if (i > k) {
    x = X.Max[1] - X.Min[1];
    y = Y.Max[1] - Y.Min[1];
    x = (x + 1) >> 1;
    y = (y + 1) >> 1;
    x = max(x, 1);
    y = max(y, 1);
    ans = min(ans, 1LL * x * y);
    return;
  }
  int id = X.idMin[1];
  X.update(1, 1, n, id);
  Y.update(1, 1, n, id);
  backtrack(i + 1);
  X.update(1, 1, n, id);
  Y.update(1, 1, n, id);
  id = X.idMax[1];
  X.update(1, 1, n, id);
  Y.update(1, 1, n, id);
  backtrack(i + 1);
  X.update(1, 1, n, id);
  Y.update(1, 1, n, id);
  id = Y.idMin[1];
  X.update(1, 1, n, id);
  Y.update(1, 1, n, id);
  backtrack(i + 1);
  X.update(1, 1, n, id);
  Y.update(1, 1, n, id);
  id = Y.idMax[1];
  X.update(1, 1, n, id);
  Y.update(1, 1, n, id);
  backtrack(i + 1);
  X.update(1, 1, n, id);
  Y.update(1, 1, n, id);
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> k;
  for (int i = 1; i <= n; ++i) {
    int x1, y1, x2, y2;
    cin >> x1 >> y1 >> x2 >> y2;
    X.a[i] = (x1 + x2);
    Y.a[i] = (y1 + y2);
  }
  for (int i = 1; i <= n; ++i) X.update(1, 1, n, i), Y.update(1, 1, n, i);
  backtrack(1);
  cout << ans << endl;
  return 0;
}
