#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=(1<<16)+5;
const int mod=1e9+7;
ll n,m,a[maxn],jc[maxn],cnt[maxn],dp[20][maxn];
bool cmp(ll a,ll b){return a>b;}
ll C(ll n,ll m){return (jc[n]/jc[m]*jc[n-m])%mod;}
ll ksm(ll x,ll k)
{
	ll res=1;
	while(k)
	{
		if(k&1) res=res*x%mod;
		x=x*x%mod;k>>=1;
	}
	return res;
}
int main()
{
	scanf("%d%d",&n,&m);
  	for(int i=1;i<=m;i++) scanf("%d",&a[i]);
  	sort(a+1,a+m+1,cmp);
	ll aim=(1<<n),ans=0;
	jc[0]=1;dp[0][0]=1;
	for(int i=1;i<=aim;i++) jc[i]=jc[i-1]*i%mod;
  	for(int i=1;i<aim;i++) cnt[i]=cnt[i^(i&-i)]+1;
  	for(int i=0;i<aim;i++) cnt[i]=(cnt[i]&1)?mod-1:1;
  	for(int i=1;i<=m;i++)
    	for(int s=0;s<aim;s++)
      	{
    		dp[i][s]=dp[i-1][s];
    		for(int j=0;j<n;j++)
      			if(s&(1<<j))
        		{
          			int t=s^(1<<j);
          			dp[i][s]=(dp[i][s]+(dp[i-1][t]*C(aim-a[i]-t,(1<<j)-1)%mod)*jc[(1<<j)])%mod;
        		}
      	}
  	for(int i=0;i<aim;i++)
      	ans=(ans+cnt[i]*dp[m][i]%mod*jc[(aim-1)^i])%mod;
  	printf("%lld\n",ans*(1<<n)%mod);
  	return 0;
}