import Control.Arrow
import Control.Monad
import Data.List
import qualified Data.ByteString.Char8 as B
import Debug.Trace

main :: IO ()
main = readLine >>= main'
    where
        main' [n, k] = readContents n >>= print . solve k

solve :: Int -> [[Int]] -> Int
solve k xys = minimum . map calc  . filter (\x -> length x >= k) $ choose vs
    where
        vs = map (\[x, y] -> (x, y)) xys 
        
        calc ((x0, y0) : xs) = (xmax - xmin) * (ymax - ymin)
            where
                (xmin, xmax, ymin, ymax) = check x0 y0 xs

        check x0 y0 = foldl' ff (x0, x0, y0, y0)
            where
                ff (xmin, xmax, ymin, ymax) (x, y) = (min x xmin, max x xmax, min y ymin, max y ymax)

        choose :: [a] -> [[a]]
        choose (x : xs) = map (x :) next ++ next
            where
                next = choose xs
        choose _ = [[]]

readLine :: IO [Int]
readLine = unfoldr (fmap (second (maybe B.empty snd . B.uncons)) . B.readInt) <$> B.getLine

readContents :: Int -> IO [[Int]]
readContents = flip replicateM readLine