#include <bits/stdc++.h>
using namespace std;
int inv(const vector<int>& v) {
  int ans = 0;
  for (int i = 0; i < v.size(); ++i) {
    for (int j = i; j < v.size(); ++j) {
      if (v[i] > v[j]) {
        ++ans;
      }
    }
  }
  return ans;
}
int maxinv(int n) { return n * (n - 1) / 2; }
vector<int> rev(const vector<int>& v, int l, int r) {
  vector<int> res = v;
  reverse(res.begin() + l, res.begin() + r + 1);
  return res;
}
double dig(const vector<int>& v, int k) {
  if (k == 0) {
    return inv(v);
  }
  double ans = 0.0;
  int n = v.size();
  for (int l = 0; l < n; ++l) {
    for (int r = l; r < n; ++r) {
      ans += dig(rev(v, l, r), k - 1) / (n * (n + 1) / 2);
    }
  }
  return ans;
}
int rot(int p, int l, int r) {
  if (p < l || p > r) {
    return p;
  }
  return r - (p - l);
}
const int MAXN = 32;
const int MAXK = 209;
double dp[MAXN][MAXN][MAXK];
bool ready[MAXN][MAXN][MAXK];
double getProb(int p1, int p2, int k, int n) {
  if (k == 0) {
    return p1 < p2;
  }
  if (!ready[p1][p2][k]) {
    ready[p1][p2][k] = true;
    double& ans = dp[p1][p2][k];
    ans = 0.0;
    for (int l = 0; l < n; ++l) {
      for (int r = l; r < n; ++r) {
        int p1n = rot(p1, l, r);
        int p2n = rot(p2, l, r);
        ans += getProb(p1n, p2n, k - 1, n) / (n * (n + 1) / 2);
      }
    }
  }
  return dp[p1][p2][k];
}
double solve(const vector<int>& p, int k) {
  int n = p.size();
  double ans = 0;
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j) {
      if (p[i] > p[j]) {
        ans += getProb(i, j, k, n);
      }
    }
  }
  return ans;
}
int main() {
  int n, k;
  cin >> n >> k;
  vector<int> p(n);
  for (int i = 0; i < n; ++i) {
    cin >> p[i];
  }
  cout.precision(9);
  cout << fixed << solve(p, k) << endl;
  return 0;
}
