#include <bits/stdc++.h>
using namespace std;
bool SR(int &x) { return scanf("%d", &x) == 1; }
bool SR(long long &x) { return scanf("%lld", &x) == 1; }
bool SR(double &x) { return scanf("%lf", &x) == 1; }
bool SR(char *s) { return scanf("%s", s) == 1; }
bool RI() { return true; }
template <typename I, typename... T>
bool RI(I &x, T &...tail) {
  return SR(x) && RI(tail...);
}
void SP(const int x) { printf("%d", x); }
void SP(const long long x) { printf("%lld", x); }
void SP(const double x) { printf("%.16lf", x); }
void SP(const char *s) { printf("%s", s); }
void PL() { puts(""); }
template <typename I, typename... T>
void PL(const I x, const T... tail) {
  SP(x);
  if (sizeof...(tail)) putchar(' ');
  PL(tail...);
}
const int maxn = 1e2 + 2;
int n, k;
int a[maxn];
void read() {
  RI(n, k);
  for (int i = 1; i <= n; i++) RI(a[i]);
}
inline int f(int i, int l, int r) {
  if (i < l || i > r) return i;
  return l + r - i;
}
short c[maxn][maxn][maxn][2], no[maxn][maxn];
void build() {
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      if (i != j)
        for (int l = 1; l <= n; l++)
          for (int r = l; r <= n; r++) {
            int x = f(i, l, r), y = f(j, l, r);
            if (x == i && y == j)
              no[i][j]++;
            else
              c[i][j][x][(x < y) != (i < j)]++;
          }
}
double dp[2][maxn][maxn];
double (*prv)[maxn], (*cur)[maxn];
void push(int i, int j) {
  cur[i][j] += prv[i][j] * no[i][j];
  if (i < j) {
    for (int t = 1; t <= j - 1; t++) cur[t][j] += prv[i][j] * c[i][j][t][0];
    cur[i][j] += prv[i][j] * (-c[i][j][i][0]);
    for (int t = i + 1; t <= n; t++) cur[i][t] += prv[i][j] * c[j][i][t][0];
    cur[i][j] += prv[i][j] * (-c[j][i][j][0]);
  } else {
    for (int t = j + 1; t <= n; t++) cur[t][j] += prv[i][j] * c[i][j][t][0];
    cur[i][j] += prv[i][j] * (-c[i][j][i][0]);
    for (int t = 1; t <= i - 1; t++) cur[i][t] += prv[i][j] * c[j][i][t][0];
    cur[i][j] += prv[i][j] * (-c[j][i][j][0]);
  }
  int lo = max(j - i + 1, 1), hi = min(n, n + j - i);
  for (int t = lo; t <= hi; t++) cur[t][t + i - j] += prv[i][j] * c[i][j][t][1];
}
void sol() {
  if (k > 700) {
    PL(n * (n - 1) / 4.0);
    return;
  }
  prv = dp[0];
  cur = dp[1];
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) cur[i][j] = (i > j);
  for (int p = 1; p <= k; p++) {
    if (clock() > 1.97 * CLOCKS_PER_SEC) break;
    swap(prv, cur);
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= n; j++) cur[i][j] = 0;
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= n; j++)
        if (i != j) push(i, j);
    int tot = n * (n + 1) / 2;
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= n; j++) cur[i][j] /= tot;
  }
  double ans = 0;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      if (a[i] < a[j]) ans += cur[i][j];
  PL((double)ans);
}
int main() {
  read();
  build();
  sol();
  return 0;
}
