output_description: Print the minimum possible area of a rectangle that satisfies the condition.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N K  
      x_1 y_1
      :  
      x_{N} y_{N}
attempt: # -*- coding: utf-8 -*-
  
  #############
  # Libraries #
  #############
  
  import sys
  
  input = sys.stdin.readline
  
  import math
  from collections import deque
  from fractions import gcd
  from functools import lru_cache
  
  
  #############
  # Constants #
  #############
  
  MOD = 10**9 + 7
  INF = float("inf")
  
  #############
  # Functions #
  #############
  
  
  ######INPUT######
  def inputI():
      return int(input().strip())
  
  
  def inputS():
      return input().strip()
  
  
  def inputIL():
      return list(map(int, input().split()))
  
  
  def inputSL():
      return list(map(str, input().split()))
  
  
  def inputILs(n):
      return list(int(input()) for _ in range(n))
  
  
  def inputSLs(n):
      return list(input().strip() for _ in range(n))
  
  
  def inputILL(n):
      return [list(map(int, input().split())) for _ in range(n)]
  
  
  def inputSLL(n):
      return [list(map(str, input().split())) for _ in range(n)]
  
  
  #####Inverse#####
  def inv(n):
      return pow(n, MOD - 2, MOD)
  
  
  ######Combination######
  kaijo_memo = []
  
  
  def kaijo(n):
      if len(kaijo_memo) > n:
          return kaijo_memo[n]
      if len(kaijo_memo) == 0:
          kaijo_memo.append(1)
      while len(kaijo_memo) <= n:
          kaijo_memo.append(kaijo_memo[-1] * len(kaijo_memo) % MOD)
      return kaijo_memo[n]
  
  
  gyaku_kaijo_memo = []
  
  
  def gyaku_kaijo(n):
      if len(gyaku_kaijo_memo) > n:
          return gyaku_kaijo_memo[n]
      if len(gyaku_kaijo_memo) == 0:
          gyaku_kaijo_memo.append(1)
      while len(gyaku_kaijo_memo) <= n:
          gyaku_kaijo_memo.append(
              gyaku_kaijo_memo[-1] * pow(len(gyaku_kaijo_memo), MOD - 2, MOD) % MOD
          )
      return gyaku_kaijo_memo[n]
  
  
  def nCr(n, r):
      if n == r:
          return 1
      if n < r or r < 0:
          return 0
      ret = 1
      ret = ret * kaijo(n) % MOD
      ret = ret * gyaku_kaijo(r) % MOD
      ret = ret * gyaku_kaijo(n - r) % MOD
      return ret
  
  
  ######Factorization######
  def factorization(n):
      arr = []
      temp = n
      for i in range(2, int(-(-(n**0.5) // 1)) + 1):
          if temp % i == 0:
              cnt = 0
              while temp % i == 0:
                  cnt += 1
                  temp //= i
              arr.append([i, cnt])
      if temp != 1:
          arr.append([temp, 1])
  
      if arr == []:
          arr.append([n, 1])
      return arr
  
  
  #####LCM#####
  def lcm(a, b):
      return a * b // gcd(a, b)
  
  
  #############
  # Main Code #
  #############
  
  
  N, K = inputIL()
  P = inputILL(N)
  
  
  xtic = list(set([xy[0] for xy in P]))
  ytic = list(set([xy[1] for xy in P]))
  xtic.sort()
  ytic.sort()
  
  ans = INF
  
  for p in P:
      x0, y0 = p
      for xmax in xtic:
          if xmax < x0:
              continue
          else:
              tempP = []
              for q in P:
                  if x0 <= q[0] <= xmax and y0 <= q[1]:
                      tempP.append(q)
              if len(tempP) < K:
                  continue
              tempP = sorted(tempP, key=lambda x: x[1])
              ans = min(ans, (xmax - x0) * (tempP[K - 1][1] - y0))
  
  
  P = [[-xy[0], xy[1]] for xy in P]
  
  xtic = list(set([xy[0] for xy in P]))
  ytic = list(set([xy[1] for xy in P]))
  xtic.sort()
  ytic.sort()
  
  
  for p in P:
      x0, y0 = p
      for xmax in xtic:
          if xmax < x0:
              continue
          else:
              tempP = []
              for q in P:
                  if x0 <= q[0] <= xmax and y0 <= q[1]:
                      tempP.append(q)
              if len(tempP) < K:
                  continue
              tempP = sorted(tempP, key=lambda x: x[1])
              ans = min(ans, (xmax - x0) * (tempP[K - 1][1] - y0))
  
  
  print(ans)
  
problem_description: Statement
  
  We have N points in a two-dimensional plane.  
  The coordinates of the i-th point (1 \leq i \leq N) are (x_i,y_i).  
  Let us consider a rectangle whose sides are parallel to the coordinate axes
  that contains K or more of the N points in its interior.  
  Here, points on the sides of the rectangle are considered to be in the
  interior.  
  Find the minimum possible area of such a rectangle.
samples: [{"input": "4 4\n    1 4\n    3 3\n    6 2\n    8 1", "output": "21\n    \n\nOne rectangle that satisfies the condition with the minimum possible area has\nthe following vertices: (1,1), (8,1), (1,4) and (8,4).  \nIts area is (8-1) \u00d7 (4-1) = 21.\n\n* * *"}, {"input": "4 2\n    0 0\n    1 1\n    2 2\n    3 3", "output": "1\n    \n\n* * *"}, {"input": "4 3\n    -1000000000 -1000000000\n    1000000000 1000000000\n    -999999999 999999999\n    999999999 -999999999", "output": "3999999996000000001\n    \n\nWatch out for integer overflows."}]