unittest
{
	assert( [ "2 2", "2 1" ].parse.expand.solve == 3 );
	assert( [ "3 5", "1 1 1" ].parse.expand.solve == 0 );
	assert( [ "10 998244353", "10 9 8 7 5 6 3 4 2 1" ].parse.expand.solve == 185297239 );
}



import std.conv;
import std.range;
import std.stdio;
import std.typecons;

void main()
{
	stdin.byLineCopy.parse.expand.solve.writeln;
}

auto parse( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	auto nk = input.front.split.to!( long[] );
	input.popFront;
	auto as = input.front.split.to!( long[] );
	return tuple( nk[ 1 ], as );
}

auto solve( long k, long[] as )
{
	// dp[ i ][ j ] = as[ j .. $ ]内のi未満の数の個数
	auto dp = new long[][]( 2001, as.length + 1 );
	for( auto i = 0L; i < dp.length; i++ )
	{
		foreach_reverse( j, a; as )
		{
			dp[ i ][ j ] = dp[ i ][ j + 1 ] + ( a < i );
		}
	}
	
	// 転倒数を集計
	auto ans = 0L;
	foreach( i, a; as )
	{
		ans = ans.addMod( addMod(
			dp[ a ][ i + 1 ].mulMod( k ),
			dp[ a ][ 0     ].mulMod( k.mulMod( k - 1 ).divMod( 2 ) )
		) );
	}
	return ans;
}

// 足し算
auto addMod( long MOD = 10L ^^ 9 + 7 )( long x, long y )
{
	return ( x + y ) % MOD;
}

// 掛け算
auto mulMod( long MOD = 10L ^^ 9 + 7 )( long x, long y )
{
	return x * y % MOD;
}

// 割り算
auto divMod( long MOD = 10L ^^ 9 + 7 )( long x, long y )
{
	return x * y.powMod!MOD( MOD - 2 ) % MOD;
}

// べき乗
auto powMod( long MOD = 10L ^^ 9 + 7 )( long x, long y )
{
	auto a = 1L;
	for( ; 0 < y; y >>= 1 )
	{
		if( y & 1 ) a = a * x % MOD;
		x = x ^^ 2 % MOD;
	}
	return a;
}
