#include <bits/stdc++.h>
using namespace std;
const long long M = 100010;
vector<pair<long long, long long> > xf, yf;
long long n, del;
pair<long long, long long> rev(pair<long long, long long> a) {
  return make_pair(a.second, a.first);
}
long long inhere(pair<long long, long long> a,
                 vector<pair<long long, long long> > &deleted,
                 long long vis[]) {
  for (long long i = 0; i < deleted.size(); i++)
    if (!vis[i] && deleted[i] == a) return i;
  return -1;
}
long long processY(long long del,
                   vector<pair<long long, long long> > &deleted) {
  long long i, j, k, l, r, vis[15];
  vector<pair<long long, long long> > sh;
  memset((vis), (false), sizeof(vis));
  for (l = 0; l < min((long long)yf.size(), 50ll); l++) {
    k = inhere(rev(yf[l]), deleted, vis);
    if (k == -1)
      sh.push_back(yf[l]);
    else
      vis[k] = 1;
  }
  for (r = yf.size() - 1; r >= max(l, (long long)yf.size() - 50); r--) {
    k = inhere(rev(yf[r]), deleted, vis);
    if (k == -1)
      sh.push_back(yf[r]);
    else
      vis[k] = 1;
  }
  sort((sh).begin(), (sh).end());
  long long minn = 111111111111111111;
  for (i = del, j = sh.size() - 1; i >= 0; i--, j--) {
    minn = min(minn, (sh[j].first - sh[i].first + 1) / 2);
  }
  return max(minn, 1ll);
}
int main() {
  ios_base::sync_with_stdio(false);
  long long i, j, k;
  long long a, b, c, d;
  scanf("%lld%lld", &n, &del);
  for (i = 0; i < n; i++) {
    scanf("%lld%lld", &a, &b);
    scanf("%lld%lld", &c, &d);
    xf.push_back(make_pair(c + a, b + d));
    yf.push_back(make_pair(b + d, c + a));
  }
  sort((xf).begin(), (xf).end());
  sort((yf).begin(), (yf).end());
  long long minn = max(1ll, ((xf.back().first - xf[0].first + 1) / 2) *
                                ((yf.back().first - yf[0].first + 1) / 2));
  for (long long dx = 0; dx <= del; dx++) {
    long long dy = del - dx;
    for (i = dx, j = n - 1; i >= 0; i--, j--) {
      vector<pair<long long, long long> > deleted;
      for (k = 0; k < i; k++) deleted.push_back(xf[k]);
      for (k = j + 1; k < n; k++) deleted.push_back(xf[k]);
      long long xx = max(1ll, (xf[j].first - xf[i].first + 1) / 2);
      long long yy = processY(dy, deleted);
      minn = min(minn, xx * yy);
    }
  }
  printf("%lld\n", minn);
  return 0;
}
