#include<bits/stdc++.h>
#define ll long long
#define x first
#define y second
#define il inline
#define em emplace
#define eb emplace_back
#define debug() puts("-----")
using namespace std;
typedef pair<int,int> pii;
il int read(){
int x=0,f=1; char ch=getchar();
while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return x*f;
}
const int N=2e5+10,M=55;
const int mod=1e9+7,inv2=500000004;
int n,m;
int a[N];
int num[N];
int fac[N];
bool st[N];
int f[N],g[N];
int cnt[N][M];
int lst[N],mp[M];
il int qmi(int x,int k){
int res=1;
while(k){
if(k&1) res=1ll*res*x%mod;
x=1ll*x*x%mod; k>>=1;
} return res;
}
int p1=0,p2=0;
int vec[N],v[N];
mt19937 rnd(time(0));
signed main(){
fac[0]=1;
n=read(),m=read();
for(int i=1;i<=n;i++){
a[i]=read();
fac[i]=fac[i-1]*2ll%mod;
f[i]=(2ll*i*i%mod*i%mod+3ll*i*i%mod+3*i+3)%mod;
for(int j=1;j<=m;j++) cnt[i][j]=cnt[i-1][j];
cnt[i][a[i]]++;
} g[1]=f[1];
for(int i=2;i<=n;i++) g[i]=(f[i]-2ll*f[i-1]%mod+f[i-2]+mod)%mod;
for(int i=n;i>=1;i--) lst[i]=mp[a[i]],mp[a[i]]=i;
vec[++p1]=n+1;
for(int l=n;l>=1;l--){
p2=0;
for(int i=1;i<=p1;i++) if(a[vec[i]]!=a[l]) v[++p2]=vec[i];
vec[p1=1]=l; for(int i=1;i<=p2;i++) vec[++p1]=v[i];
for(int j=1;j<=m;j++) st[j]=false;
for(int i=1;i<p1;i++){
int r=vec[i],res=fac[r-l+1];
st[a[r]]=true;
for(int j=1;j<=m;j++){
int val=cnt[n][j]-cnt[r][j]+cnt[l-1][j];
res=1ll*res*(fac[val]-(!st[j])+mod)%mod;
} num[r-l+1]=(num[r-l+1]+res)%mod;
num[vec[i+1]-l+1]=(num[vec[i+1]-l+1]-res+mod)%mod;
}
} int ans=0;
for(int i=1;i<=n;i++){
num[i]=(num[i]+num[i-1])%mod;
ans=(ans+1ll*num[i]*g[i]%mod*qmi(fac[i],mod-2)%mod)%mod;
} printf("%d\n",ans);
return 0;
}