#include <bits/stdc++.h>
using namespace std;
const int maxsize = 2e5;
int n;
pair<long long, long long> points[maxsize];
pair<pair<long long, long long>, int> width_sorted[maxsize],
    height_sorted[maxsize];
long long count(set<pair<pair<long long, long long>, int>>& marked) {
  long long lbound = 0, hbound = 0;
  for (int i = 0; i < n; i++) {
    if (marked.find(height_sorted[i]) == marked.end()) {
      lbound = height_sorted[i].first.second;
      break;
    }
  }
  for (int i = n - 1; i >= 0; i--) {
    if (marked.find(height_sorted[i]) == marked.end()) {
      hbound = height_sorted[i].first.second;
      break;
    }
  }
  long long left_bound = 0, right_bound = 0;
  for (int i = 0; i < n; i++) {
    if (marked.find(width_sorted[i]) == marked.end()) {
      left_bound = width_sorted[i].first.first;
      break;
    }
  }
  for (int i = n - 1; i >= 0; i--) {
    if (marked.find(width_sorted[i]) == marked.end()) {
      right_bound = width_sorted[i].first.first;
      break;
    }
  }
  return max(2LL, (hbound - lbound + (hbound - lbound) % 2)) *
         max(2LL, (right_bound - left_bound + (right_bound - left_bound) % 2));
}
long long count(int a, int b, int c, int d) {
  set<pair<pair<long long, long long>, int>> marked;
  int ind = 0;
  while (a > 0) {
    if (marked.find(height_sorted[ind]) == marked.end()) {
      a--;
      marked.insert(height_sorted[ind]);
    }
    ind++;
  }
  ind = n - 1;
  while (b > 0) {
    if (marked.find(height_sorted[ind]) == marked.end()) {
      b--;
      marked.insert(height_sorted[ind]);
    }
    ind--;
  }
  ind = 0;
  while (c > 0) {
    if (marked.find(width_sorted[ind]) == marked.end()) {
      c--;
      marked.insert(width_sorted[ind]);
    }
    ind++;
  }
  ind = n - 1;
  while (d > 0) {
    if (marked.find(width_sorted[ind]) == marked.end()) {
      d--;
      marked.insert(width_sorted[ind]);
    }
    ind--;
  }
  return count(marked);
}
bool cmp(pair<pair<long long, long long>, int> a,
         pair<pair<long long, long long>, int> b) {
  swap(a.first.first, a.first.second);
  swap(b.first.first, b.first.second);
  return a < b;
}
void print(long long x) {
  if (x < 4) {
    cout << 1 << endl;
    return;
  }
  cout << x / 4 << endl;
}
int main() {
  int k;
  scanf("%d%d", &n, &k);
  for (int i = 0; i < n; i++) {
    long long x_1, y_1, x_2, y_2;
    cin >> x_1 >> y_1 >> x_2 >> y_2;
    x_1 *= 2;
    y_1 *= 2;
    x_2 *= 2;
    y_2 *= 2;
    points[i] = make_pair((x_1 + x_2) / 2, (y_1 + y_2) / 2);
    width_sorted[i] = make_pair(points[i], i);
    height_sorted[i] = make_pair(points[i], i);
  }
  sort(width_sorted, width_sorted + n);
  sort(height_sorted, height_sorted + n, cmp);
  long long min_sq = count(0, 0, 0, 0);
  for (int i = 0; i <= k; i++) {
    for (int j = 0; j <= k - i; j++) {
      for (int c = 0; c <= k - i - j; c++) {
        for (int z = 0; z <= k - i - j - c; z++) {
          long long sq = count(i, j, c, z);
          min_sq = min(min_sq, sq);
        }
      }
    }
  }
  print(min_sq);
}
