#include <fstream>
#include <iostream>
#include <algorithm>
#define DIM 310
#define INF 2000000000
#define x first
#define y second
using namespace std;
int det(int X1, int Y1, int X2, int Y2, int X3, int Y3) {
return (X2-X1)*(Y3-Y1) - (X3-X1)*(Y2-Y1);
}
int n, i, j, k, K, sol, aria, puncte, t;
pair<int, int> v[DIM];
int a[DIM][DIM], sub[DIM], sus[DIM], jos[DIM];
int getPoints(pair<int, int> i, pair<int, int> j, pair<int, int> k, int pi, int pj, int pk) {
int puncte = 0;
if (i > j)
swap(i, j), swap(pi, pj);
if (i > k)
swap(i, k), swap(pi, pk);
if (j < k)
swap(j, k), swap(pj, pk);
if (det(i.x, i.y, j.x, j.y, k.x, k.y) < 0) {
/// k este sub
if (sub[pi] != pk && sub[pj] != pk) {
puncte = a[pi][pj] - a[pi][pk] - a[pk][pj];
if (sub[pk])
puncte++;
} else
if (sub[pi] == pk) {
puncte = a[pi][pj] - a[pk][pj] - 1;
} else
puncte = a[pi][pj] - a[pi][pk] - 1;
} else
if (det(i.x, i.y, j.x, j.y, k.x, k.y) > 0) {
if (sub[pk] != pi && sub[pk] != pj) {
puncte = a[pi][pk] + a[pk][pj] - a[pi][pj];
if (sub[pk] && det(i.x, i.y, j.x, j.y, v[ sub[pk] ].x, v[ sub[pk] ].y) > 0)
puncte--;
} else
if (sub[pk] == pi)
puncte = a[pk][pj] - a[pi][pj] - 1;
else
puncte = a[pi][pk] - a[pi][pj] - 1;
}
return puncte;
}
inline int modul(int x) {
return (x > 0 ? x : -x);
}
int main () {
ifstream fin ("popandai.in");
ofstream fout("popandai.out");
//cout<<det(0, 0, 1, 0, 1, -1);
fin>>n>>K;
for (i=1;i<=n;i++)
fin>>v[i].x>>v[i].y;
sol = INF;
sort(v+1, v+n+1);
for (i=1;i<n;i++)
for (j=i+1;j<=n;j++) {
a[i][j] = 0;
for (k=1;k<=n;k++) {
if ((v[k].x - v[i].x) * (v[k].x - v[j].x) <= 0 &&
(v[k].y - v[i].y) * (v[k].y - v[j].y) <= 0 ) {
continue;
}
if (det(v[i].x, v[i].y, v[j].x, v[j].y, v[k].x, v[k].y) < 0 &&
(v[k].x - v[i].x) * (v[k].x - v[j].x) <= 0) {
a[i][j]++;
continue;
}
}
a[j][i] = a[i][j];
if (v[i].x == v[j].x) {
if (v[i].y < v[j].y)
sub[j]= i;
else
if (v[j].y < v[i].y)
sub[i] = j;
}
}
for (i=1;i<n;i++)
for (j=i+1;j<=n;j++) {
for (k=0;k<=n;k++)
sus[k] = jos[k] = INF;
for (k=1;k<=n;k++){
if (k == i || k == j)
continue;
aria = modul( det(v[i].x, v[i].y, v[j].x, v[j].y, v[k].x, v[k].y) );
puncte = getPoints(v[i], v[j], v[k], i, j, k);
if (det(v[i].x, v[i].y, v[j].x, v[j].y, v[k].x, v[k].y) < 0) {
jos[puncte] = min(jos[puncte], aria);
} else {
sus[puncte] = min(sus[puncte], aria);
}
}
for (k=n-1;k>=0;k--) {
sus[k] = min(sus[k], sus[k+1]);
jos[k] = min(jos[k], jos[k+1]);
}
for (t = 0; t<=K; t++) {
sol = min(sol, sus[t] + jos[K-t]);
sol = min(sol, jos[t] + sus[K-t]);
}
}
fout<<sol/2;
if (sol % 2 == 0)
fout<<".0\n";
else
fout<<".5\n";
return 0;
}