import std.stdio, std.conv, std.string, std.array, std.range, std.algorithm, std.container;
import std.math, std.random, std.bigint, std.datetime, std.format;
void main(string[] args){ if(args.length > 1) if(args[1] == "-debug") DEBUG = 1; solve(); }
void log()(){ writeln(""); } void log(T, A ...)(T t, lazy A a){ if(DEBUG) write(t, " "), log(a); } bool DEBUG = 0; 
string read(){ static string[] ss; while(!ss.length) ss = readln.chomp.split; string res = ss[0]; ss.popFront; return res; }
// ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- //

void solve(){
	int n = read.to!int;
	int k = read.to!int;
	P[] ps;
	foreach(i; 0 .. n) ps ~= P(read.to!long, read.to!long);
	log("ps:", ps);
	
	P[][long] x2p, y2p;
	foreach(p; ps){
		if(p.x !in x2p) x2p[p.x] = [];
		x2p[p.x] ~= p;
		if(p.y !in y2p) y2p[p.y] = [];
		y2p[p.y] ~= p;
	}
	log("x2p:", x2p, "y2p:", y2p);
	
	long[] xs = x2p.keys;
	xs.sort();
	long[] ys = y2p.keys;
	ys.sort();
	log("xs:", xs, "ys:", ys);
	
	const long infty = 1_000_000_999;
	
	int[][] cf = new int[][](xs.length + 1, ys.length + 1);
	foreach(i; 0 .. xs.length) cf[i][0] = 0;
	foreach(j; 0 .. ys.length) cf[0][j] = 0;
	foreach(i, x; xs){
		long yold = -infty;
		foreach(j, y; ys){
			int c = (j > 0)? cf[i + 1][j]: 0;
			foreach(p; y2p[y]) if(p.x <= x) c += 1; 
			foreach(p; x2p[x]) if(p.y > yold && p.y <= y && p.x != x) c += 1;
			cf[i + 1][j + 1] = c;
			yold = y;
		}
	}
	log("cf:", cf);
	
	long ans = infty * infty * 6;
	
	foreach(i1, x1; xs) foreach(i0, x0; xs[0 .. i1 + 1]){
		foreach(j1, y1; ys) foreach(j0, y0; ys[0 .. j1 + 1]){
			int c = cf[i1 + 1][j1 + 1] - cf[i1 + 1][j0] - cf[i0][j1 + 1] + cf[i0][j0];
			if(c >= k) ans = min(ans, (x1 - x0) * (y1 - y0));
			log("i0:", i0, "i1:", i1, "j0:", j0, "j1:", j1, "c:", c, "k:", k, "ans:", ans);
		}
	}
	
	ans.writeln;
}
struct P{
	long x, y;
}
