#include <bits/stdc++.h>
class G2InversionsProblem {
 public:
  int n, k;
  int arr[31];
  double dp[31][31][201] = {0};
  void solve(std::istream& in, std::ostream& out) {
    out.precision(10);
    in >> n >> k;
    for (int i = 0; i < n; i++) {
      in >> arr[i];
    }
    for (int i = 0; i < n; i++) {
      for (int j = i + 1; j < n; j++) {
        if (arr[i] > arr[j]) dp[i][j][0] = 1.0;
      }
    }
    for (int t = 1; t <= k; t++) {
      for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
          for (int x = 0; x < n; x++) {
            for (int y = x; y < n; y++) {
              if ((i < x && y < j) || (y < i) || (x > j))
                dp[i][j][t] += dp[i][j][t - 1] * 2.0 / n / (n + 1);
              else if (x <= i && y < j)
                dp[i][j][t] += dp[x + y - i][j][t - 1] * 2.0 / n / (n + 1);
              else if (i < x && j <= y)
                dp[i][j][t] += dp[i][x + y - j][t - 1] * 2.0 / n / (n + 1);
              else
                dp[i][j][t] +=
                    (1.0 - dp[x + y - j][x + y - i][t - 1]) * 2.0 / n / (n + 1);
            }
          }
        }
      }
    }
    double ans = 0;
    for (int i = 0; i < n; i++) {
      for (int j = i + 1; j < n; j++) {
        ans += dp[i][j][k];
      }
    }
    out << ans;
  }
};
int main() {
  G2InversionsProblem solver;
  std::istream& in(std::cin);
  std::ostream& out(std::cout);
  solver.solve(in, out);
  return 0;
}
