#include <bits/stdc++.h>
#define MOD 1000000007LL
using namespace std;
typedef long long ll;
typedef pair<int,int> P;

int n,m;
int a[5005];
vector<int> G[5005];
int col[5005];
vector<P> vec;
int cnt[2];
ll dp[2][5005];

bool dfs(int v,int c){
	cnt[c]++;
	col[v]=c;
	for(int i=0;i<G[v].size();i++){
		if(col[G[v][i]]==-1){
			if(!dfs(G[v][i],1-c)){
				return false;
			}
		}else if(col[v]==col[G[v][i]]){
			return false;
		}
	}
	return true;
}

int main(void){
	scanf("%d%d",&n,&m);
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	for(int i=0;i<n;i++){
		for(int j=i+1;j<n;j++){
			if(a[i]>a[j]){
				G[i].push_back(j);
				G[j].push_back(i);
			}
		}
	}
	memset(col,-1,sizeof(col));
	for(int i=0;i<n;i++){
		if(col[i]==-1){
			cnt[0]=cnt[1]=0;
			if(!dfs(i,0)){
				printf("0\n");
				return 0;
			}
			vec.push_back(P(cnt[0],cnt[1]));
		}
	}
	int cur=0,nxt=1;
	dp[0][0]=1;
	int sum=0;
	for(int i=0;i<vec.size();i++){
		//printf("%d %d\n",vec[i].first,vec[i].second);
		for(int j=0;j<=sum;j++){
			dp[nxt][j+vec[i].first]+=dp[cur][j];
			dp[nxt][j+vec[i].first]%=MOD;
			dp[nxt][j+vec[i].second]+=dp[cur][j];
			dp[nxt][j+vec[i].second]%=MOD;
		}
		sum+=vec[i].first;
		sum+=vec[i].second;
		swap(cur,nxt);
		memset(dp[nxt],0,sizeof(dp[nxt]));
	}
	ll ans=0;
	for(int i=0;i<=n;i++){
		if(i<=m && (n-i)<=m){
			ans+=dp[cur][i];
		}
	}
	printf("%lld\n",ans);
	return 0;
}

