#include <bits/stdc++.h>
using namespace std;
template <typename T>
void chkmax(T &x, T y) {
  x = x > y ? x : y;
}
template <typename T>
void chkmin(T &x, T y) {
  x = x > y ? y : x;
}
const int INF = 2139062143;
template <typename T>
void read(T &x) {
  x = 0;
  bool f = 1;
  char ch;
  do {
    ch = getchar();
    if (ch == '-') f = 0;
  } while (ch > '9' || ch < '0');
  do {
    x = x * 10 + ch - '0';
    ch = getchar();
  } while (ch >= '0' && ch <= '9');
  x = f ? x : -x;
}
template <typename T>
void write(T x) {
  if (x < 0) x = ~x + 1, putchar('-');
  if (x > 9) write(x / 10);
  putchar(x % 10 + '0');
}
const int N = 100 + 5;
int n, m, nxt, a[N];
double ans, f[2][N][N];
inline int C2(int x) { return x * (x + 1) / 2; }
int main() {
  read(n);
  read(m);
  m = min(m, 900);
  for (int i = 1; i <= n; i++) read(a[i]);
  for (int i = 1; i <= n; i++) {
    for (int j = i + 1; j <= n; j++) {
      f[0][i][j] = a[i] > a[j];
    }
  }
  nxt = 1;
  for (int Turn = 1; Turn <= m; Turn++) {
    for (int i = 1; i <= n; i++) {
      for (int j = i + 1; j <= n; j++) {
        f[nxt][i][j] =
            f[nxt ^ 1][i][j] * (C2(i - 1) + C2(n - j) + C2(j - i - 1)) / C2(n);
        for (int K = 1 - i; K < j - i; K++) {
          f[nxt][i][j] += 1.0 * f[nxt ^ 1][i + K][j] *
                          min(min(i, i + K), j - max(i, i + K)) / C2(n);
        }
        for (int K = i - j + 1; K <= n - j; K++) {
          f[nxt][i][j] += 1.0 * f[nxt ^ 1][i][j + K] *
                          min(min(j, j + K) - i, n - max(j, j + K) + 1) / C2(n);
        }
        for (int K = 1 - i; K <= n - j; K++) {
          f[nxt][i][j] += 1.0 * (1.0 - f[nxt ^ 1][i + K][j + K]) *
                          min(min(i, i + K), n - max(j, j + K) + 1) / C2(n);
        }
      }
    }
    nxt ^= 1;
  }
  for (int i = 1; i <= n; i++) {
    for (int j = i + 1; j <= n; j++) {
      ans += f[nxt ^ 1][i][j];
    }
  }
  printf("%.10lf\n", ans);
  return 0;
}
