#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
const ll MOD = 1000000007;
const int maxn = 200005;

ll fact[maxn];

void init(ll n)
{
	fact[0] = fact[1] = 1;
	for (ll i = 2; i <= n; ++i)
	{
		fact[i] = (fact[i - 1] * i) % MOD;
	}
	return;
}

ll powmod(ll a, ll n)
{
	ll ret = 1;
	for (ll base = a; n; base = (base * base) % MOD, n >>= 1)
	{
		if (n & 1)
		{
			ret = (ret * base) % MOD;
		}
	}
	return ret;
}

ll P(ll n, ll m)
{
	return fact[n] * powmod(fact[n - m], MOD - 2) % MOD;
}

void fenwick_add(ll *tree, ll m, ll pos)
{
	while (pos <= m)
	{
		++tree[pos];
		pos += pos&-pos;
	}
	return;
}

ll fenwick_sum(ll *tree, ll pos)
{
	ll ret = 0;
	while (pos)
	{
		ret += tree[pos];
		pos -= pos&-pos;
	}
	return ret;
}

ll solve(ll *perm, ll n, ll m)
{
	ll ret = 0;
	ll *tree = new ll[m + 1];
	memset(tree, 0, sizeof(ll) * (m + 1));
	
	for (ll i = 0; i < n; ++i)
	{
		ll cnt = perm[i] - 1;
		cnt -= fenwick_sum(tree, perm[i]);
		ret = (ret + (cnt * P(m - i - 1, n - i - 1)) % MOD) % MOD;
		fenwick_add(tree, m, perm[i]);
	}
	delete [] tree;
	return ret;
}

int main()
{
	ll n, m;
	ll *perm;
	scanf("%lld%lld", &n, &m);
	perm = new ll [n];
	for (ll i = 0; i < n; ++i)
	{
		scanf("%lld", &perm[i]);
	}
	init(m);
	printf("%lld\n", solve(perm, n, m));
	delete [] perm;
	return 0;
}

