#include<stdio.h>
#include<stdlib.h>

typedef long long ll;

int comp(const void *p1,const void *p2);

int main(void){
  int N,k,i,j,nowbit=0,nextbit;
  ll ans=1,a[64];
  const ll mod=(ll)1E9+7;

  scanf("%d%d",&N,&k);
  for(i=0;i<k;i++) scanf("%lld",&a[i]);
  if(k!=0) qsort(a,k,sizeof(a[0]),comp);

  for(i=1;i<k;i++){
    for(j=0;j<N;j++){
      if((a[i-1]>>j&1)==1 && (a[i]>>j&1)==0){
	puts("0");
	return 0;
      }
    }
  }

  for(i=0;i<=k;i++){
    if(i!=k){
      nextbit=0;
      for(j=0;j<N;j++) nextbit+=a[i]>>j&1;
    }else nextbit=N;
    for(j=1;j<=nextbit-nowbit;j++){
      ans*=j;
      ans%=mod;
    }
    nowbit=nextbit;
  }
  printf("%lld\n",ans);
  return 0;
}

int comp(const void *p1,const void *p2){
  ll n1=*(ll *)p1;
  ll n2=*(ll *)p2;
  return n1-n2>0;
}