import Data.List

type Point = (Int, Int)
type Rect = ((Int, Int), (Int, Int))

main :: IO ()
main = do
    [n, k] <- map read . words <$> getLine :: IO [Int]
    ps <- map (\[x, y] -> (read x, read y)) . map words . lines <$> getContents :: IO [Point]

    let xs = nub . sort . map fst $ ps :: [Int]
    let ys = nub . sort . map snd $ ps :: [Int]

    let rs = [((x0, y0), (x1, y1)) | x0 <- xs, x1 <- xs, x0 < x1, y0 <- ys, y1 <- ys, y0 < y1] :: [Rect]
    let rs_ge_k = filter (\r -> (count r ps) >= k) rs :: [Rect]
    print $ maximum . map area $ rs_ge_k

count :: Rect -> [Point] -> Int
count r = length . filter (in_rect r)


in_rect :: Rect -> Point -> Bool
in_rect ((x0, y0), (x1, y1)) (s, t) = x0 <= s && s <= x1 && y0 <= t && t <= y1

area :: Rect -> Int
area ((x0, y0), (x1, y1)) = (x1 - x0) * (y1 - y0)
