#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int MAX_N = 25;
int N, K, A[MAX_N];
int dp[1<<MAX_N];
int f(int L) {
if(dp[L]!=-1)
return dp[L];
int num_seq = 0, highest_bit = -1, i;
for(int j=0; j<N; j++) {
if(L & 1<<j) { // if j in L
num_seq++;
highest_bit = j;
}
}
i = highest_bit + 1;
if(i==N)
return 1;
dp[L] = 0;
for(int j=0; j<i; j++)
if(L & 1<<j)
if(A[i] < A[j])
dp[L] = (dp[L] + f(L ^ 1<<j | 1<<i)) % MOD;
// (L ^ 1<<j) removes j from L if already present
// (L | 1<<i) adds i to L
if(num_seq<K)
dp[L] = (dp[L] + f(L | 1<<i)) % MOD;
return dp[L];
}
int main() {
cin >> N >> K;
for(int i=0; i<N; i++)
cin >> A[i];
memset(dp, -1, sizeof(dp));
int ans = f(0);
cout << ans << endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7CmNvbnN0IGludCBNQVhfTiA9IDI1OwogCmludCBOLCBLLCBBW01BWF9OXTsKaW50IGRwWzE8PE1BWF9OXTsKICAgIAppbnQgZihpbnQgTCkgewogICAgaWYoZHBbTF0hPS0xKQogICAgICAgIHJldHVybiBkcFtMXTsKICAgIAogICAgaW50IG51bV9zZXEgPSAwLCBoaWdoZXN0X2JpdCA9IC0xLCBpOwogICAgZm9yKGludCBqPTA7IGo8TjsgaisrKSB7CiAgICAgICAgaWYoTCAmIDE8PGopIHsgICAgICAvLyBpZiBqIGluIEwKICAgICAgICAgICAgbnVtX3NlcSsrOwogICAgICAgICAgICBoaWdoZXN0X2JpdCA9IGo7CiAgICAgICAgfQogICAgfQogICAgaSA9IGhpZ2hlc3RfYml0ICsgMTsKICAgIGlmKGk9PU4pCiAgICAgICAgcmV0dXJuIDE7CiAgICBkcFtMXSA9IDA7CiAgICBmb3IoaW50IGo9MDsgajxpOyBqKyspCiAgICAgICAgaWYoTCAmIDE8PGopCiAgICAgICAgICAgIGlmKEFbaV0gPCBBW2pdKQogICAgICAgICAgICAgICAgZHBbTF0gPSAoZHBbTF0gKyBmKEwgXiAxPDxqIHwgMTw8aSkpICUgTU9EOwogICAgICAgICAgICAgICAgLy8gKEwgXiAxPDxqKSByZW1vdmVzIGogZnJvbSBMIGlmIGFscmVhZHkgcHJlc2VudAogICAgICAgICAgICAgICAgLy8gKEwgfCAxPDxpKSBhZGRzIGkgdG8gTAogICAgaWYobnVtX3NlcTxLKQogICAgICAgIGRwW0xdID0gKGRwW0xdICsgZihMIHwgMTw8aSkpICUgTU9EOwogICAgCiAgICByZXR1cm4gZHBbTF07Cn0KIAppbnQgbWFpbigpIHsKICAgIGNpbiA+PiBOID4+IEs7CiAgICBmb3IoaW50IGk9MDsgaTxOOyBpKyspCiAgICAgICAgY2luID4+IEFbaV07CiAgICAKICAgIG1lbXNldChkcCwgLTEsIHNpemVvZihkcCkpOwogICAgaW50IGFucyA9IGYoMCk7CiAgICBjb3V0IDw8IGFucyA8PCBlbmRsOwogICAgCiAgICByZXR1cm4gMDsKfQ==