#include <bits/stdc++.h>
using namespace std;
struct xy {
  int x, y, i;
  xy(int _x, int _y, int _i) : x(_x), y(_y), i(_i) {}
};
int N, K;
bool cmp0(xy a, xy b) {
  return make_tuple(a.y, a.x, a.i) > make_tuple(b.y, b.x, b.i);
}
bool cmp1(xy a, xy b) {
  return make_tuple(a.x, a.y, a.i) > make_tuple(b.x, b.y, b.i);
}
bool cmp2(xy a, xy b) {
  return make_tuple(a.y, a.x, a.i) < make_tuple(b.y, b.x, b.i);
}
bool cmp3(xy a, xy b) {
  return make_tuple(a.x, a.y, a.i) < make_tuple(b.x, b.y, b.i);
}
bool (*cmp[])(xy a, xy b) = {cmp0, cmp1, cmp2, cmp3};
vector<xy> v[4];
int main() {
  scanf("%d %d", &N, &K);
  for (int Ni = 0; Ni < N; Ni++) {
    int x[2], y[2];
    for (int i = 0; i < 2; i++) scanf("%d %d", &x[i], &y[i]);
    xy p = xy((x[0] + x[1]), (y[0] + y[1]), Ni);
    for (int i = 0; i < 4; i++) v[i].push_back(p);
  }
  for (int i = 0; i < 4; i++) sort(v[i].begin(), v[i].end(), cmp[i]);
  long long ans = 1e18;
  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++) {
          set<int> s;
          int _i = i, _j = j, _k = k, _l = l;
          int dx = 0, dy = 0;
          for (int f = 0; f < 4; f++)
            for (xy p : v[f])
              if (s.find(p.i) == s.end()) {
                if (f == 0 && !_i--) {
                  dy += p.y;
                  break;
                }
                if (f == 1 && !_j--) {
                  dx += p.x;
                  break;
                }
                if (f == 2 && !_k--) {
                  dy -= p.y;
                  break;
                }
                if (f == 3 && !_l--) {
                  dx -= p.x;
                  break;
                }
                s.insert(p.i);
              }
          ans = min(ans, (long long)max(2, (dx + 1) / 2 * 2) *
                             max(2, (dy + 1) / 2 * 2) / 4);
        }
  printf("%lld\n", ans);
}
