constint MXN = 500005; constint DVS = 998244353; constint INV2 = 499122177; int N, M, perm[MXN], ans, sum[MXN], coe[MXN];
inlineintquery(int x){ intv(0); while (x) v += sum[x], x -= x & -x; return v; } inlinevoidadd(int x){ while (x <= N) ++sum[x], x += x & -x; }
intpw(int b, int p){ inta(1); while (p) { if (p & 1) a = a * 1LL * b % DVS; b = b * 1LL * b % DVS; p >>= 1; } return a; } voidexgcd(int a, int b, int& x, int& y){ if (!b) x = 1; elseexgcd(b, a % b, y, x), y -= a / b * x; } inlineintgetinv(int a){ intx(0), y(0); exgcd(a, DVS, x, y); return (x % DVS + DVS) % DVS; }
intmain(){ scanf("%d%d", &N, &M); for (inti(0); i != N; ++i) scanf("%d", &perm[i]); if (N & 1) add(perm[N >> 1]); for (inti(N / 2); i; --i) { coe[i] += query(perm[i - 1]); add(perm[i - 1]); if (N - i != i - 1) { coe[i] += N - i - i + 1 - query(perm[N - i]); add(perm[N - i]); } } for (inti(1); i <= N / 2; ++i) coe[i] = (coe[i] + coe[i - 1]) % DVS; for (inti(0); i <= N / 2; ++i) coe[i] = (coe[i] + (N - i - i) * 1LL * (N - i - i - 1) / 2 % DVS * INV2) % DVS; for (inti(N / 2 - 1); ~i; --i) coe[i + 1] = (coe[i + 1] - coe[i] + DVS) % DVS; for (inti(0); i <= N / 2; ++i) { intb(((N - i - i) * 1LL * (N - i - i + 1) + (N - i - i + 1) / 2 * 2) % DVS); b = (b + DVS - (N + 1) / 2 * 2) % DVS; ans = (ans + coe[i] * 1LL * pw(b, M)) % DVS; } ans = ans * 1LL * getinv(pw(N * 1LL * (N + 1) % DVS, M)) % DVS; printf("%d\n", ans); return0; }