#include <bits/stdc++.h>
using namespace std;
struct poi {
  int x, y;
  poi operator-(poi p) { return (poi){x - p.x, y - p.y}; }
  long long operator*(poi p) { return 1ll * x * p.y - 1ll * y * p.x; }
} A[205], a[205];
bool cmp(poi x, poi y) { return x * y > 0; }
bool turn(int x, int y, int z) { return (a[y] - a[x]) * (a[z] - a[y]) > 0; }
int b[205 << 1], v[205 * 205], f[205 * 205], tot;
int q[205][205], l[205], r[205];
int n, nn, m;
long long d[205][205][55], w[55], ans;
void add(int x, int y) { v[++tot] = y, f[tot] = b[x], b[x] = tot; }
void link(int x, int y) {
  for (; l[x] < r[x] && turn(q[x][l[x]], x, y); ++l[x]) link(q[x][l[x]], y);
  add(x + nn, y);
  add(y, x);
  q[y][r[y]++] = x;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; ++i) scanf("%d%d", &A[i].x, &A[i].y);
  ans = 0;
  for (int i = 1; i <= n; ++i) {
    nn = 0;
    for (int j = 1; j <= n; ++j)
      if (i != j && A[i].x <= A[j].x) a[++nn] = A[j] - A[i];
    sort(a + 1, a + nn + 1, cmp);
    memset(b, 0, sizeof b);
    tot = 0;
    memset(l, 0, sizeof l);
    memset(r, 0, sizeof r);
    for (int j = 1; j <= nn - 1; ++j) link(j, j + 1);
    for (int j = 1; j <= nn; ++j)
      for (int k = b[j + nn]; k; k = f[k])
        for (int p = 0; p <= m; ++p) d[j][v[k]][p] = 0;
    for (int j = nn; j; --j) {
      memset(w, 0, sizeof w);
      int k = b[j + nn];
      for (int p = b[j]; p; p = f[p]) {
        d[v[p]][j][0] = 0;
        d[v[p]][j][1] = a[v[p]] * a[j];
        for (int u = 2; u <= m; ++u)
          d[v[p]][j][u] = w[u - 1] > 0 ? w[u - 1] + a[v[p]] * a[j] : 0;
        for (; k && turn(v[p], j, v[k]); k = f[k])
          for (int u = 1; u <= m; ++u)
            if (d[j][v[k]][u - 1] > w[u - 1])
              w[u - 1] = d[j][v[k]][u - 1],
                    d[v[p]][j][u] = w[u - 1] + a[v[p]] * a[j];
      }
    }
    for (int j = 1; j <= nn; ++j)
      for (int k = b[j + nn]; k; k = f[k]) ans = max(ans, d[j][v[k]][m - 2]);
  }
  printf("%lld", ans >> 1);
  puts(ans & 1 ? ".50" : ".00");
  return 0;
}
