#include "bits/stdc++.h" using namespace std; #define FOR(i,j,k) for(int (i)=(j);(i)<(int)(k);++(i)) #define rep(i,j) FOR(i,0,j) #define each(x,y) for(auto &(x):(y)) #define mp make_pair #define mt make_tuple #define all(x) (x).begin(),(x).end() #define debug(x) cout<<#x<<": "<<(x)< pii; typedef vector vi; typedef vector vll; const int MOD = (int)1e9 + 7; int add(int a, int b){ int c = a + b; if(c >= MOD)c -= MOD; else if(c < 0)c += MOD; return c; } void sadd(int &a, int b){ a += b; if(a >= MOD)a -= MOD; else if(a < 0)a += MOD; } int mul(int a, int b){ return (int)((long long)a*b%MOD); } int bitcntll(unsigned long long x) { x = (x & 0x5555555555555555) + ((x >> 1) & 0x5555555555555555); x = (x & 0x3333333333333333) + ((x >> 2) & 0x3333333333333333); x = (x & 0x0f0f0f0f0f0f0f0f) + ((x >> 4) & 0x0f0f0f0f0f0f0f0f); x = (x & 0x00ff00ff00ff00ff) + ((x >> 8) & 0x00ff00ff00ff00ff); x = (x & 0x0000ffff0000ffff) + ((x >> 16) & 0x0000ffff0000ffff); x = (x & 0x00000000ffffffff) + ((x >> 32) & 0x00000000ffffffff); return (int)x; } int main(){ ios::sync_with_stdio(false); cin.tie(0); int N, K; while(cin >> N >> K) { vll A(K); int a = 0, b = 0; rep(i, K) { cin >> A[i]; if(A[i] == 0)a = 1; if(A[i] == (1ll << N) - 1)b = 1; } if(!a)A.push_back(0); if(!b)A.push_back((1ll << N) - 1); K = sz(A); sort(all(A)); int ans = 1; bool ok = true; rep(i, K - 1) { if((A[i] & A[i + 1]) != A[i]) { ok = false; break; } else { ll x = A[i + 1] - A[i]; int y = bitcntll(x); for(int j = 2; j <= y; ++j) { ans=mul(ans, j); } } } if(!ok)ans = 0; cout << ans << endl; } }