#include <bits/stdc++.h>
using namespace std;
int n, K;
pair<long long, long long> p[100010];
set<pair<long long, int> > X, Y;
long long ans = 0;
long long t1, t2, t3, t4;
vector<int> opt;
int main() {
  scanf("%d%d", &n, &K);
  for (int i = 1; i <= n; i++) {
    scanf("%lld%lld%lld%lld", &t1, &t2, &t3, &t4);
    p[i] = make_pair(t1 + t3, t2 + t4);
    X.insert(make_pair(p[i].first, i));
    Y.insert(make_pair(p[i].second, i));
  }
  ans = 0x3f3f3f3f3f3f3f3f;
  for (int i = 0; i <= K; i++) {
    for (int j = 0; i + j <= K; j++) {
      for (int k = 0; i + j + k <= K; k++) {
        for (int l = 0; i + j + k + l <= K; l++) {
          opt.clear();
          for (int t = 1; t <= i; t++) {
            int pos = X.begin()->second;
            opt.push_back(pos);
            X.erase(make_pair(p[pos].first, pos));
            Y.erase(make_pair(p[pos].second, pos));
          }
          for (int t = 1; t <= j; t++) {
            int pos = X.rbegin()->second;
            opt.push_back(pos);
            X.erase(make_pair(p[pos].first, pos));
            Y.erase(make_pair(p[pos].second, pos));
          }
          for (int t = 1; t <= k; t++) {
            int pos = Y.begin()->second;
            opt.push_back(pos);
            X.erase(make_pair(p[pos].first, pos));
            Y.erase(make_pair(p[pos].second, pos));
          }
          for (int t = 1; t <= l; t++) {
            int pos = Y.rbegin()->second;
            opt.push_back(pos);
            X.erase(make_pair(p[pos].first, pos));
            Y.erase(make_pair(p[pos].second, pos));
          }
          ans = min(
              ans,
              (max(1ll, (X.rbegin()->first - X.begin()->first + 1) / 2)) *
                  (max(1ll, (Y.rbegin()->first - Y.begin()->first + 1) / 2)));
          for (auto &x : opt) {
            X.insert(make_pair(p[x].first, x));
            Y.insert(make_pair(p[x].second, x));
          }
        }
      }
    }
  }
  printf("%lld\n", ans);
  return 0;
}
