#include <bits/stdc++.h>
template <class T>
inline bool rd(T &ret) {
  char c;
  int sgn;
  if (c = getchar(), c == EOF) return 0;
  while (c != '-' && (c < '0' || c > '9')) c = getchar();
  sgn = (c == '-') ? -1 : 1;
  ret = (c == '-') ? 0 : (c - '0');
  while (c = getchar(), c >= '0' && c <= '9') ret = ret * 10 + (c - '0');
  ret *= sgn;
  return 1;
}
template <class T>
inline void pt(T x) {
  if (x < 0) {
    putchar('-');
    x = -x;
  }
  if (x > 9) pt(x / 10);
  putchar(x % 10 + '0');
}
using namespace std;
const int N = 105;
int n, m, a[N];
double dp[N][N], tmp[N][N];
int main() {
  while (cin >> n >> m) {
    for (int i = 1; i <= n; i++) rd(a[i]);
    memset(dp, 0, sizeof dp);
    for (int i = 1; i <= n; i++)
      for (int j = i + 1; j <= n; j++) dp[i][j] = 1;
    while (m--) {
      memcpy(tmp, dp, sizeof dp);
      memset(dp, 0, sizeof dp);
      for (int i = 1; i <= n; i++)
        for (int j = i + 1; j <= n; j++) {
          for (int x = 1; x <= n; x++)
            for (int y = x; y <= n; y++) {
              int xx = i, yy = j;
              if (x <= i && i <= y) xx = x + y - i;
              if (x <= j && j <= y) yy = x + y - j;
              if (xx > yy) swap(xx, yy);
              if (x <= i && j <= y)
                dp[i][j] += 1 - tmp[xx][yy];
              else
                dp[i][j] += tmp[xx][yy];
            }
          dp[i][j] /= (double)(n + 1) * n / 2;
        }
    }
    double ans = 0;
    for (int i = 1; i <= n; i++)
      for (int j = i + 1; j <= n; j++) {
        if (a[i] > a[j])
          ans += dp[i][j];
        else
          ans += 1 - dp[i][j];
      }
    printf("%.10f\n", ans);
  }
  return 0;
}
