#include<bits/stdc++.h>
#define mod 1000000007
using namespace std;
int n, m, num[20], dp[20][70007], fac[70007], inv[70007], res = 0;
int add(int& a, int b)
{
	a += b;
	if (a >= mod)a -= mod;
	return 0;
}
int c(int a, int b)
{
	return 1LL * fac[a] * inv[b] % mod * inv[a - b] % mod;
}
int main()
{
	cin >> n >> m;
	for (int i = 1; i <= m; i++)
		cin >> num[i];
	fac[0] = fac[1] = inv[0] = inv[1] = 1;
	for (int i = 2; i <= (1 << n); i++)
		fac[i] = 1LL * fac[i - 1] * i % mod;
	for (int i = 2; i <= (1 << n); i++)
		inv[i] = 1LL * (mod - mod / i) * inv[mod % i] % mod;
	for (int i = 2; i <= (1 << n); i++)
		inv[i] = 1LL * inv[i - 1] * inv[i] % mod;
	sort(num + 1, num + m + 1);
	dp[m + 1][0] = 1;
	for (int i = m; i >= 1; i--)
		for (int j = 0; j < (1 << n); j++)
		{
			add(dp[i][j], dp[i + 1][j]);
			int t = (1 << n) - j - num[i];
			for (int k = 0; k < n; k++)
				if (!((j >> k) & 1))
				{
					if (t < (1 << k) - 1)break;
					add(dp[i][j | (1 << k)], 1LL * dp[i + 1][j] * c(t, (1 << k) - 1) % mod * fac[1 << k] % mod) % mod;
				}
		}
	for (int i = 0; i < (1 << n); i++)
	{
		int c = 1;
		for (int j = 0; j < n; j++)
			if ((i >> j) & 1)c *= -1;
		add(c, mod);
		res = (res + 1LL * c * dp[1][i] % mod * fac[(1 << n) - i - 1] % mod) % mod;
	}
	cout << 1LL * res * (1 << n) % mod << endl;
	return 0;
}