#include <bits/stdc++.h>
int n, k;
bool visited[101][101][1010];
double ar[101], dp[101][101][1010];
double F(int i, int j, int k) {
  if (i > j) return 1.0 - F(j, i, k);
  if (k == 0) return 1.0;
  if (visited[i][j][k]) return dp[i][j][k];
  int a, b, c, d, l;
  double x, y, p = 1.0 / ((n * (n + 1)) >> 1), res = 0.0;
  for (a = 0; a < n; a++) {
    for (b = a; b < n; b++) {
      c = i, d = j;
      if (c >= a && c <= b) c = b - (c - a);
      if (d >= a && d <= b) d = b - (d - a);
      res += (p * F(c, d, k - 1));
    }
  }
  visited[i][j][k] = true;
  return (dp[i][j][k] = res);
}
int main() {
  int i, j, l;
  while (scanf("%d %d", &n, &k) != EOF) {
    if (k > 1000) k = 1000;
    for (i = 0; i < n; i++) scanf("%d", &ar[i]);
    memset(visited, 0, sizeof(visited));
    double res = 0.0;
    for (i = 0; i < n; i++) {
      for (j = i + 1; j < n; j++) {
        if (ar[i] < ar[j])
          res += (1.0 - F(i, j, k));
        else
          res += F(i, j, k);
      }
    }
    printf("%0.12f\n", res + 1e-15);
  }
  return 0;
}
