#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define ULL unsigned long long
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define pll pair<LL,LL>
#define x first
#define y second
#define pi acos(-1)
#define sqr(x) ((x)*(x))
#define pdd pair<double,double>
#define MEMS(x) memset(x,-1,sizeof(x))
#define MEM(x) memset(x,0,sizeof(x))
#define less Less
#define EPS 1e-4
#define arg ARG
#define cpdd const pdd
#define rank Rank
#define KK 500
#define N 100005
#define MXN 2000005
int dp[5005];
int main(){
    int n,m;
    scanf("%d %d",&n,&m);
    int s[5005];
    for(int i = 1;i<=n;i++)
        scanf("%d",&s[i]);
    vector<int> v1,v2;
    //v1.pb(1);
    vector<pii> v;
    int now=1,Max=0;
    for(int i =1;i<=n;i++){
        Max=max(Max,s[i]);
        if(s[i]==now){
            v2.pb(s[i]);
        }  
        else{
            if(v2.empty()){
                if(!v1.empty()&&s[i]<v1.back()){
                    printf("0\n");
                    return 0;
                }
                v1.pb(s[i]);
            }
            else{
                if(v1.back()<s[i]){
                    v1.pb(s[i]);
                }
                else if(v2.back()<s[i]){
                    v2.pb(s[i]);
                }
                else{
                    printf("0\n");
                    return 0;
                }
            }
        }
        if((i-now+1)==v1.size()+v2.size()&&v2.size()&&i==Max){
            v.pb(mp(v1.size(),v2.size()));
          //  printf("%d %d\n",v1.size(),v2.size());
            now=i+1;
            v1.clear();
            v2.clear();
        }
    }
    dp[0]=1;
    const int mod= 1e9+7;
    for(auto it:v){
        for(int j=n;j>=0;j--){
            if(dp[j]){
                int tmp=dp[j];
                dp[j]=0;
                dp[j+it.x]+=tmp;
                dp[j+it.y]+=tmp;
                dp[j+it.x]%=mod;
                dp[j+it.y]%=mod;
            }
        }
       // for(int j =0;j<=n;j++)
        //    printf("%d ",dp[j]);
        //printf("\n");
    }
    LL ans=0;
    for(int i = 0;i<=n&&i<=m;i++){
        if(n-i<=m)ans+=dp[i];
    }
    printf("%lld\n",ans%mod);
    return 0;
}
