#include <bits/stdc++.h>
using namespace std;
const int N = 210;
struct P {
  long long x, y;
  P() {}
  P(long long x, long long y) : x(x), y(y) {}
  void read() { scanf("%lld%lld", &x, &y); }
  void out() { printf("(%lld,%lld)\n", x, y); }
  P operator-(const P& b) const { return P(x - b.x, y - b.y); }
  long long operator/(const P& b) const { return x * b.y - y * b.x; }
  bool operator<(const P& b) const { return *this / b > 0; }
} postion[N], p[N];
inline long long cross(P a, P b, P c) { return (b - a) / (c - a); }
int n, K;
vector<int> in[N], out[N];
queue<int> q[N];
void link(int a, int b) {
  while ((int)(q[a]).size() && cross(p[a], p[b], p[q[a].front()]) > 0) {
    link(q[a].front(), b);
    q[a].pop();
  }
  out[a].push_back(b);
  in[b].push_back(a);
  q[b].push(a);
}
long long dp[N][N][51];
inline void Update(long long& x, long long d) { x = max(x, d); }
int main() {
  scanf("%d%d", &n, &K);
  K -= 2;
  for (int i = 0; i < (n); ++i) postion[i].read();
  long long ans = 0;
  for (int s = 0; s < (n); ++s) {
    int tot = 0;
    for (int i = 0; i < (n); ++i)
      if (i != s && (postion[i].x >= postion[s].x))
        p[tot++] = postion[i] - postion[s];
    if (tot - 1 < K) continue;
    sort(p, p + tot);
    for (int i = 0; i < (tot); ++i) in[i].clear(), out[i].clear();
    for (int i = 0; i < (tot); ++i)
      while ((int)(q[i]).size()) q[i].pop();
    for (int i = 0; i < (tot); ++i)
      for (int j = i + 1; j < (tot); ++j)
        for (int k = 0; k < (K + 1); ++k) dp[i][j][k] = -1;
    for (int i = 0; i < (tot - 1); ++i) link(i, i + 1);
    for (int i = 0; i < (tot); ++i) {
      for (auto e : out[i]) dp[i][e][1] = p[i] / p[e];
      for (int k = 1; k < (min(K, i + 1)); ++k) {
        long long Max = -1;
        for (int r = 0, l = 0; r < (int)(out[i]).size(); ++r) {
          for (; l < (int)(in[i]).size() &&
                 cross(p[i], p[out[i][r]], p[in[i][l]]) > 0;
               ++l)
            Max = max(Max, dp[in[i][l]][i][k]);
          if (Max != -1)
            Update(dp[i][out[i][r]][k + 1], Max + p[i] / p[out[i][r]]);
        }
      }
    }
    for (int i = 0; i < (tot); ++i)
      for (int j = i + 1; j < (tot); ++j) Update(ans, dp[i][j][K]);
  }
  printf("%lld.%d0\n", ans >> 1, ans & 1 ? 5 : 0);
  return 0;
}
