#include <bits/stdc++.h>
using namespace std;
const int int_inf = 0x3f3f3f3f;
const long long ll_inf = 0x3f3f3f3f3f3f3f3fll;
const double pi = acos(-1.0);
const double eps = 1e-8;
template <class T>
inline T abs(const T first) {
  return first < 0 ? -first : first;
}
template <class T>
inline void get_min(T &a, T b) {
  if (a > b) a = b;
}
template <class T>
inline void get_max(T &a, T b) {
  if (a < b) a = b;
}
template <class T>
inline void fix(T &a, T mo) {
  while (a >= mo) a -= mo;
  while (a < 0) a += mo;
}
template <class T>
inline void inc(T &a, T b, T mo) {
  a += b;
  fix(a, mo);
}
template <class T>
inline void dec(T &a, T b, T mo) {
  a -= b;
  fix(a, mo);
}
template <class T>
inline T mul_mod(T a, T b, T mo) {
  T ans = 0;
  for (; b; b >>= 1) {
    if (b & 1) inc(ans, a, mo);
    inc(a, a, mo);
  }
  return ans;
}
template <class T>
inline T pow_mod(T a, T b, T mo) {
  T ans = 1;
  for (; b; b >>= 1) {
    if (b & 1) ans = (long long)ans * a % mo;
    a = (long long)a * a % mo;
  }
  return ans;
}
template <class T>
inline T big_pow_mod(T a, T b, T mo) {
  T ans = 1;
  for (; b; b >>= 1) {
    if (b & 1) ans = mul_mod(ans, a, mo);
    a = mul_mod(a, a, mo);
  }
  return ans;
}
template <class T>
inline T pow(T a, int b) {
  T ans = 1;
  for (; b; b >>= 1) {
    if (b & 1) ans *= a;
    a *= a;
  }
  return ans;
}
template <class T>
inline T sqr(T first) {
  return first * first;
}
template <class T>
inline int sgn(T first) {
  if (first > eps) return 1;
  if (first < -eps) return -1;
  return 0;
}
template <class T>
inline void read_int(T &first) {
  first = 0;
  char ch;
  bool flag = 0;
  while (ch = getchar(), !isdigit(ch) && ch != '-')
    ;
  if (ch == '-')
    flag = 1;
  else
    first = ch - '0';
  while (ch = getchar(), isdigit(ch))
    first = (first << 3) + first + first + ch - '0';
  if (flag) first = -first;
}
template <class T>
inline void read_float(T &first) {
  first = 0;
  long double now_pos = 0.1;
  char ch;
  while (ch = getchar(), !isdigit(ch) && ch != '-')
    ;
  bool flag = 0, decimal = 0;
  if (ch == '-')
    flag = 1;
  else if (ch == '.')
    decimal = 1;
  while (ch = getchar(), isdigit(ch) || ch == '.') {
    if (ch == '.')
      decimal = 1;
    else if (decimal) {
      first += now_pos * (ch - '0');
      now_pos *= 0.1;
    } else
      first = first * 10 + ch - '0';
  }
  if (flag) first = -first;
}
int ans, base;
int n, k;
int a[10];
inline void dfs(int dep) {
  if (dep == k) {
    base++;
    for (int i = 1; i <= n; i++)
      for (int j = i + 1; j <= n; j++) ans += a[i] > a[j];
    return;
  }
  for (int l = 1; l <= n; l++)
    for (int r = l; r <= n; r++) {
      for (int i = l; i < r - (i - l); i++) swap(a[i], a[r - (i - l)]);
      dfs(dep + 1);
      for (int i = l; i < r - (i - l); i++) swap(a[i], a[r - (i - l)]);
    }
}
int main() {
  read_int(n);
  read_int(k);
  for (int i = 1; i <= n; i++) read_int(a[i]);
  dfs(0);
  printf("%.10f\n", (double)ans / base);
  return 0;
}
