#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void umax(T &a, T b) {
  if (a < b) a = b;
}
template <class T>
inline void umin(T &a, T b) {
  if (a > b) a = b;
}
template <class T>
inline T abs(T a) {
  return a > 0 ? a : -a;
}
const int inf = 1e9 + 143;
const long long longinf = 1e18 + 143;
inline int read() {
  int x;
  scanf(" %d", &x);
  return x;
}
const int N = 55;
const int K = 222;
int n, k;
int p[N];
double dp[N][N][K][2];
bool used[N][N][K][2];
bool need = 0;
int get(int x, int l, int r) {
  if (l <= x && x <= r) {
    return r - (x - l);
  } else {
    return x;
  }
}
double calc(int l, int r, int k, int t) {
  if (k == 0) {
    0;
    if (t == 0)
      return (l < r) ? 1 : 0;
    else
      return (l < r) ? 0 : 1;
  }
  if (used[l][r][k][t]) return dp[l][r][k][t];
  used[l][r][k][t] = 1;
  double &rev = dp[l][r][k][t];
  rev = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = i; j <= n; j++) {
      int nl = get(l, i, j);
      int nr = get(r, i, j);
      rev += calc(nl, nr, k - 1, t) / ((double)n * (n + 1) / 2);
    }
  }
  0;
  return rev;
}
int main() {
  n = read();
  int k = read();
  for (int i = 1; i <= n; i++) p[i] = read();
  double res = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = i + 1; j <= n; j++) {
      if (p[i] > p[j])
        res += calc(i, j, k, 0);
      else
        res += calc(i, j, k, 1);
    }
  }
  printf("%.10lf\n", res);
  return 0;
}
