#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);
}