#include <algorithm>
using namespace std;
#define sc second
#define fs first
#define INF 0x3f3f3f3f
#define DIM 305
pair <int,int> v[DIM];
int up[DIM],dn[DIM];
int sub[DIM][DIM];
int N,K,sol;
int ind[5];
void read ()
{
int i;
scanf ("%d%d",&N,&K);
for (i=1; i<=N; ++i)
scanf ("%d%d",&v[i].fs,&v[i].sc);
}
inline int det (int a,int b,int c)
{
return (v[b].fs-v[a].fs)*(v[c].sc-v[a].sc)-(v[c].fs-v[a].fs)*(v[b].sc-v[a].sc);
}
void init ()
{
int i,j,k;
sort (v+1,v+N+1);
for (i=1; i<=N; ++i)
for (j=i+1; j<=N; ++j)
{
for (k=i+1; k<j; ++k)
if (det (i,j,k)<0)
++sub[i][j];
sub[j][i]=sub[i][j];
}
}
struct cmp
{
bool operator () (const int &a,const int &b)
{
return v[a].fs<v[b].fs;
}
};
void solve ()
{
int i,j,k,nrp;
sol=INF;
for (i=1; i<=N; ++i)
for (j=i+1; j<=N; ++j)
{
memset (up,INF,sizeof (up));
memset (dn,INF,sizeof (dn));
for (k=1; k<=N; ++k)
if (k!=i && k!=j)
{
ind[1]=i; ind[2]=j; ind[3]=k;
sort (ind+1,ind+4,cmp ());
if (det (ind[1],ind[2],ind[3])<0)
nrp=sub[ind[1]][ind[2]]+sub[ind[2]][ind[3]]-sub[ind[1]][ind[3]];
else
nrp=sub[ind[1]][ind[3]]-sub[ind[1]][ind[2]]-sub[ind[2]][ind[3]]-1;
if (det (i,j,k)<0)
dn[nrp]=min (dn[nrp],abs (det (i,j,k)));
else
up[nrp]=min (up[nrp],abs (det (i,j,k)));
}
for (k=N-1; k>=0; --k)
{
up[k]=min (up[k],up[k+1]);
dn[k]=min (dn[k],dn[k+1]);
}
for (k=0; k<=K; ++k)
if (up[k]!=INF && dn[K-k]!=INF)
sol=min (sol,up[k]+dn[K-k]);
}
printf ("%.1lf",(double)sol/2);
}
int main ()
{
freopen ("popandai.in","r",stdin);
freopen ("popandai.out","w",stdout);
read ();
init ();
solve ();
return 0;
}