#include <bits/stdc++.h>
using namespace std;
const int MOD7 = 1e9 + 7;
const int MOD9 = 1e9 + 9;
const double EPS = 1e-9;
long long int gcd(long long int a, long long int b) {
  return b == 0 ? a : gcd(b, a % b);
}
int toint(const string &s) {
  stringstream second;
  second << s;
  int x;
  second >> x;
  return x;
}
long long int mpow(long long int a, long long int n, int mod) {
  long long int ret = 1;
  long long int b = a;
  while (n) {
    if (n & 1) ret = (ret * b) % mod;
    b = (b * b) % mod;
    n >>= 1;
  }
  return (long long int)ret;
}
struct cmp {
  bool operator()(pair<pair<int, int>, int> a, pair<pair<int, int>, int> b) {
    if (a.first.first < b.first.first)
      return true;
    else if (a.first.first == b.first.first)
      return a.first.second < b.first.second;
    return false;
  }
};
map<int, int> hashm;
vector<pair<int, int> > coordy, v;
int main() {
  int tc;
  tc = 1;
  int i, n, m, k, a, b, c, d, u, w, sum, permissible, j;
  long long minl = 0, areamin = (long long int)9223372036854775805;
  int pfor[13] = {0}, pback[13] = {0};
  while (tc--) {
    scanf("%d", &n);
    scanf("%d", &k);
    for (i = 0; i < n; i++) {
      scanf("%d", &a);
      scanf("%d", &b);
      scanf("%d", &c);
      scanf("%d", &d);
      coordy.push_back(make_pair(b + d, a + c));
      hashm[a + c]++;
    }
    m = 0;
    for (map<int, int>::iterator it = hashm.begin(); it != hashm.end(); ++it) {
      v.push_back(make_pair(it->second, it->first));
    }
    m = v.size();
    for (i = 0; i < k; i++) pfor[i + 1] = pfor[i] + v[i].first;
    for (i = 0; i < k; i++) pback[i + 1] = pback[i] + v[m - 1 - i].first;
    sort(coordy.begin(), coordy.end());
    for (i = 0; i <= k; i++) {
      for (j = 0; j <= k; j++) {
        if (i <= m - 1 - j && v[i].second <= v[m - 1 - j].second &&
            pfor[i] + pback[j] <= k) {
          u = 0;
          w = 0;
          sum = 0;
          permissible = n - k;
          minl = 2 * MOD9;
          while (u <= w && w < n) {
            if (coordy[w].second >= v[i].second &&
                coordy[w].second <= v[m - 1 - j].second)
              sum++;
            while (sum >= permissible && coordy[w].first >= coordy[u].first) {
              if (coordy[w].first > coordy[u].first)
                minl = min(minl,
                           (long long int)(coordy[w].first - coordy[u].first));
              else
                minl = min(minl, (long long int)2);
              if (coordy[u].second >= v[i].second &&
                  coordy[u].second <= v[m - 1 - j].second)
                sum--;
              u++;
            }
            w++;
          }
          if (minl != MOD9 * 2 && v[m - 1 - j].second != v[i].second)
            areamin = min(areamin, (long long int)minl *
                                       (v[m - 1 - j].second - v[i].second));
          else if (minl != MOD9 * 2 && v[m - 1 - j].second == v[i].second)
            areamin = min(areamin, (long long int)minl * 2);
        }
      }
    }
    if (n == 1 || (areamin / 4) == 0)
      printf("1\n");
    else
      printf("%lld\n", areamin / 4);
  }
  return 0;
}
