#include <bits/stdc++.h>
using namespace std;
int n, k, i, a[30], b[30];
double dp[205][30][30][2];
bool used[205][30][30][2];
double getDp(int k, int a, int b, bool flag) {
  int i;
  if (used[k][a][b][flag]) return dp[k][a][b][flag];
  if (k == 0) return flag;
  int len = b - a - 1;
  dp[k][a][b][flag] =
      getDp(k - 1, a, b, flag) *
      (((a + 1) * a + (n - b - 1) * (n - b) + len * (len + 1)) / 2);
  for (i = 0; i < b; i++) {
    dp[k][a][b][flag] +=
        getDp(k - 1, i, b, flag) * min(min(i + 1, a + 1), min(b - a, b - i));
  }
  for (i = a + 1; i < n; i++) {
    dp[k][a][b][flag] +=
        getDp(k - 1, a, i, flag) * min(min(i - a, b - a), min(n - b, n - i));
  }
  for (i = 0; i < n - (b - a); i++) {
    int x = i, j = i + (b - a);
    if (i < a)
      dp[k][a][b][flag] += getDp(k - 1, i, j, flag ^ 1) * min(i + 1, n - b);
    else
      dp[k][a][b][flag] += getDp(k - 1, i, j, flag ^ 1) * min(a + 1, n - j);
  }
  dp[k][a][b][flag] /= 1.0 * (n * (n + 1) / 2);
  used[k][a][b][flag] = true;
  return dp[k][a][b][flag];
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie();
  cin >> n >> k;
  for (i = 0; i < n; i++) cin >> a[i], b[--a[i]] = i;
  double ans = 0;
  for (i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      if (b[i] < b[j])
        ans += 1 - getDp(k, b[i], b[j], 1);
      else
        ans += getDp(k, b[j], b[i], 1);
    }
  }
  cout << fixed << setprecision(12) << ans;
  return 0;
}
