#include <iostream>
#include <cstdio>
#include <algorithm>
#define MAXN 350
using namespace std;
struct coord
{
int x, y;
coord(int x = 0, int y = 0) : x(x), y(y) { }
};
int n, k;
coord a[MAXN];
int sub[MAXN][MAXN];
double ar[MAXN];
void citire()
{
scanf("%d %d", &n, &k);
for (int i = 1; i <= n; i++)
scanf("%d %d", &a[i].x, &a[i].y);
}
double det(double x1, double y1, double x2, double y2, double x3, double y3)
{
return x1*y2 + x2*y3 + x3*y1 - x3*y2 - x2*y1 - x1*y3;
}
double det(coord e, coord f, coord g)
{
return det(e.x, e.y, f.x, f.y, g.x, g.y);
}
void prepare()
{
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++) {
if (i == j) continue;
for (int k = 1; k <= n; k++) {
if (k == i || k == j) continue;
if (a[i].x < a[j].x && det(a[i], a[j], a[k]) < 0 ||
a[i].x >= a[j].x && det(a[i], a[j], a[k]) > 0)
if (a[k].x >= min(a[i].x, a[j].x) && a[k].x <= max(a[i].x, a[j].x))
sub[i][j]++;
}
}
}
int triunghi(int e, int f, int g)
{
int cs[3] = {e, f, g};
sort(cs, cs+3, [](int p1, int p2){return a[p1].x < a[p2].x;});
if (det(a[cs[0]], a[cs[1]], a[cs[2]]) > 0) {
return sub[cs[0]][cs[2]] - sub[cs[0]][cs[1]] - sub[cs[1]][cs[2]] - 1;
}
else {
return sub[cs[0]][cs[1]] + sub[cs[1]][cs[2]] - sub[cs[0]][cs[2]];
}
}
double myabs(double x)
{
if (x < 0) return -x;
return x;
}
void solve()
{
double rez = 5e100;
for (int i = 1; i <= n; i++) {
for (int j = i+1; j <= n; j++) {
for (int k = j+1; k <= n; k++)
ar[k] = 5e100;
for (int k = 1; k <= n; k++) {
if (k == i || k == j) continue;
if (det(a[i], a[j], a[k]) > 0) continue;
int pts = triunghi(i, j, k);
ar[pts] = min(ar[pts], myabs(det(a[i], a[j], a[k])));
}
for (int k = n-1; k >= 0; k--)
ar[k] = min(ar[k], ar[k+1]);
for (int k = 1; k <= n; k++) {
if (k == i || k == j) continue;
if (det(a[i], a[j], a[k]) < 0) continue;
int pts = triunghi(i, j, k);
rez = min(rez, ar[k-pts] + myabs(det(a[i], a[j], a[k])));
}
}
}
printf("%.1lf", rez);
}
int main()
{
freopen("popandai.in", "r", stdin);
freopen("popandai.out", "w", stdout);
citire();
prepare();
solve();
return 0;
}