#include<bits/stdc++.h> using namespace std; #define FOR(i,a,b) for (int i=(a);i<(b);i++) #define RFOR(i,a,b) for (int i=(b)-1;i>=(a);i--) #define REP(i,n) for (int i=0;i<(n);i++) #define RREP(i,n) for (int i=(n)-1;i>=0;i--) typedef long long LL; LL ans=0; LL N; LL k; LL a[111]; LL b[111]; vector<LL>v; int main(){ cin>>N; cin>>k; if(k==0){ ans=1; REP(i,N){ ans*=(i+1); ans%=1000000007; } }else{ REP(i,k){ cin>>a[i]; v.push_back(a[i]); } sort(v.begin(),v.end()); LL now=0; LL count=0; REP(i,k){ if(i!=0){ if(v[i]==v[i-1]){ cout<<0<<endl; return 0; } } LL check=now; LL test=v[i]; LL c=0; while(check!=0||test!=0){ LL aa=check%2; LL bb=test%2; if(aa==1&&bb==0){ cout<<0<<endl; return 0; } if(aa==0&&bb==1){ now|=(1<<c); count++; } c++; check/=2; test/=2; } b[i]=count; } ans=1; REP(i,b[0]){ ans*=(i+1); ans%=1000000007; } for(int i=1;i<k;i++){ REP(j,b[i]-b[i-1]){ ans*=(j+1); ans%=1000000007; } } REP(i,N-b[k-1]){ ans*=(i+1); ans%=1000000007; } } /*REP(i,k){ cout<<b[i]<<endl; }*/ cout<<ans<<endl; return(0); }