import std.algorithm;
import std.array;
import std.ascii;
import std.container;
import std.conv;
import std.format;
import std.math;
import std.range;
import std.stdio;
import std.string;
import std.typecons;

void main()
{
  auto input = readln.chomp.split.map!(to!int);
  auto n = input[0];
  auto K = input[1];
  long[] xs;
  long[] ys;
  bool[long] xset;
  bool[long] yset;
  alias Point = Tuple!(long, "x", long, "y");
  bool[Point] set;
  foreach (i; 0 .. n)
  {
    auto xy = readln.chomp.split.map!(to!int);
    int x = xy.front;
    int y = xy.back;
    xs ~= x;
    ys ~= y;
    xset[x] = true;
    yset[y] = true;
    set[Point(x, y)] = true;
  }
  long[] xlist = xset.keys;
  long[] ylist = yset.keys;
  std.algorithm.sort(xlist);
  std.algorithm.sort(ylist);
  long ans = long.max;
  auto yn = ylist.length;
  auto xn = xlist.length;
  int[][] imos = new int[][](yn + 1, xn + 1);
  foreach (i; 0 .. yn)
  {
    foreach (j; 0 .. xn)
    {
      imos[i + 1][j + 1] += imos[i + 1][j] + (Point(xlist[j], ylist[i]) in set ? 1 : 0);
    }
    stderr.writeln;
  }
  foreach (i; 0 .. xn)
  {
    foreach (j; 0 .. yn)
    {
      imos[j + 1][i + 1] += imos[j][i + 1];
    }
  }
  foreach (i; 0 .. yn + 1)
  {
    foreach (j; 0 .. xn + 1)
    {
      stderr.write = (j ? " " : "") ~ imos[i][j].to!string;
    }
    stderr.writeln;
  }
  foreach (i; 0 .. yn)
  {
    foreach (j; i .. yn)
    {
      foreach (k; 0 .. xn)
      {
        foreach (l; k .. xn)
        {
          // TODO
          int cnt = imos[j + 1][l + 1] - imos[j + 1][k] - imos[i][l + 1] + imos[i][k];
          if (cnt >= K) {
            ans = min(ans, (xlist[l] - xlist[k]) * (ylist[j] - ylist[i]));
          }
        }
      }
    }
  }
  ans.writeln;
}