#include <bits/stdc++.h>
int dx[4] = {0, -1, 0, 1};
int dy[4] = {1, 0, -1, 0};
using namespace std;
pair<int, int> x[223456], y[223456];
int fuck[100];
int n, K;
bool del[223456];
int cnt = 0;
int dele(pair<int, int> f[], int num, bool lef) {
  if (lef) {
    for (int i = 0; i < n; i++) {
      if (del[f[i].second]) continue;
      if (num == 0) return f[i].first;
      del[f[i].second] = true;
      fuck[cnt++] = f[i].second;
      num--;
    }
  } else {
    for (int i = n - 1; i >= 0; i--) {
      if (del[f[i].second]) continue;
      if (num == 0) return f[i].first;
      del[f[i].second] = true;
      fuck[cnt++] = f[i].second;
      num--;
    }
  }
}
inline long long get(long long x1, long long x2, long long y1, long long y2) {
  long long l1 = max(1ll, (x2 - x1 + 1) / 2);
  long long l2 = max(1ll, (y2 - y1 + 1) / 2);
  return l1 * l2;
}
int main() {
  scanf("%d", &n);
  scanf("%d", &K);
  for (int i = 0; i < int(n); ++i) {
    int x1, y1, x2, y2;
    scanf("%d", &x1);
    scanf("%d", &y1);
    scanf("%d", &x2);
    scanf("%d", &y2);
    x[i] = {x1 + x2, i};
    y[i] = {y1 + y2, i};
  }
  sort(x, x + n);
  sort(y, y + n);
  long long ans = get(x[0].first, x[n - 1].first, y[0].first, y[n - 1].first);
  for (int d1 = 0; d1 <= K; d1++) {
    for (int d1l = 0; d1l <= d1; d1l++) {
      int d1r = d1 - d1l;
      int d2 = K - d1;
      for (int d2l = 0; d2l <= d2; d2l++) {
        int d2r = d2 - d2l;
        int x1 = dele(x, d1l, true);
        int x2 = dele(x, d1r, false);
        int y1 = dele(y, d2l, true);
        int y2 = dele(y, d2r, false);
        ans = min(ans, get(x1, x2, y1, y2));
        while (cnt > 0) {
          del[fuck[cnt - 1]] = false;
          cnt--;
        }
      }
    }
  }
  cout << ans << endl;
  return 0;
}
