#include #define rep(i, a, n) for(int i = a; i < n; i++) #define repb(i, a, b) for(int i = a; i >= b; i--) #define all(a) a.begin(), a.end() #define o(a) cout << a << endl #define int long long using namespace std; typedef pair P; const int mod = 1e9 + 7; int n, k; long long mod_pow(long long x,long long n){ if(n == 0) return 1; long long res = mod_pow(x*x % mod, n / 2); if(n & 1) res = res*x % mod; return res; } signed main(){ cin >> n >> k; vector d; vector f(n); rep(i, 0, k){ int a; cin >> a; if(a != 0) d. push_back(a); } int MAX = mod_pow(2, n) - 1; if(k == 0 || d[k] != MAX) d.push_back(MAX); int ans = 1; bool g = true; int now = 0; rep(i, 0, d.size()){ // cout << -1 << endl; int tmp = d[i] - now; now = d[i]; int cnt = 0; if(tmp < 0){ g = false; break; } rep(j, 0, n){ if(tmp & (1 << j)){ if(!f[j]){ cnt++; f[j] = true; }else{ g = false; break; } } } rep(j, 0, cnt){ ans = (ans * (j + 1)) % mod; } // cout << cnt << endl; } if(!g) ans = 0; cout << ans << endl; }