#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define fw(p) for(int w=0;w<(p);w++)
#define fx(p) for(int x=0;x<(p);x++)
#define fy(p) for(int y=0;y<(p);y++)
#define fz(p) for(int z=0;z<(p);z++)
#define fyg(p,g) for(int y=(g);y<(p);y++)
#define fzg(p,g) for(int z=(g);z<(p);z++)
#define ce(d) cout<<d<<endl;
#define vecp(p) int aa;cin>>aa;(p).push_back(aa);
#define vecpl(p) long long aa;cin>>aa;(p).push_back(aa);
#define vecps(p) string aa;cin>>aa;(p).push_back(aa);
#define vecp2(p) cin>>aa;(p).push_back(aa);
#define vecpl2(p) long long a	b;cin>>ab;(p).push_back(ab);
#define vecps2(p) string ab;cin>>ab;(p).push_back(ab);
#define set0(k,n) for(int nn=0;nn<(n);nn++){ (k).push_back(0); }
#define sorts(c) sort((c).begin(),(c).end());
#define reverses(c) reverse((c).begin(),(c).end());
#define vec(b) vector<int> (b);
#define vecl(b) vector<long long> (b);
#define vecs(b) vector<string> (b);
#define vecsize(b,size) vector<int> (b)((size));
#define pb(b,a) (b).push_back((a));
#define doublece(a,b) cout<<(a)<<' '<<(b)<<endl;
#define pairs(s) vector<pair<int,int>> (s);
#define pairsl(s) vector<pair<ll,ll>> (s);
#define pairss(s) vector<pair<string,string>> (s);
#define pairsp(s) int aa,bb;cin>>aa>>bb;(s).push_back(make_pair(aa,bb));
#define pairspl(s) int aa,bb;cin>>aa>>bb;(s).push_back(make_pair(aa,bb));
#define pairsps(s) int aa,bb;cin>>aa>>bb;(s).push_back(make_pair(aa,bb));
#define pairsREV(s) (s).push_back(make_pair(bb,aa));
#define pairslREV(s) (s).push_back(make_pair(bb,aa));
#define pairssREV(s) (s).push_back(make_pair(bb,aa));
#define MOD 1000000007

int main()
{
		int N, P;
	ll sums[8] = { 0,0,0,0, 0,0,0,0 };
	cin >> N >> P;
	vec(A);
	fx(N) {
		vecp(A);
		A[x] %= 2;
	}

	if (N < 4) {
		fx(1<<N) {
			int y = x;
			int index = 0;
			int sum = 0;
			while ((y >> index) > 0) {
				if (((y >> index) & 1) == 1) {
					sum += A[index];
				}
				index++;
			}
			if (sum % 2 == 0) {
				sums[0]++;
			}
			else {
				sums[1]++;
			}
		}
		if (P==0) {
			ce(sums[0])
		}
		else {
			ce(sums[1])
		}
	}
	else {
		fx((1 << N / 4)) {
			int y = x;
			int index = 0;
			int sum = 0;
			while ((y >> index) > 0) {
				if (((y >> index) & 1) == 1) {
					sum += A[index];
				}
				index++;
			}
			if (sum % 2 == 0) {
				sums[0]++;
			}
			else {
				sums[1]++;
			}
		}
		fx((1 <<(N/2 - N / 4))) {
			int y = x;
			int index = 0;
			int sum = 0;
			while ((y >> index) > 0) {
				if (((y >> index) & 1) == 1) {
					sum += A[index+ N/4];
				}
				index++;
			}
			if (sum % 2 == 0) {
				sums[2]++;
			}
			else {
				sums[3]++;
			}
		}

		//doublece((sums[0]+sums[1]),(1<<N/2))
		fx(1 <<  N / 4) {
			int y = x;
			int index = 0;
			int sum = 0;
			while ((y >> index) > 0) {
				if (((y >> index) & 1) == 1) {
					sum += A[index + N / 2];
				}
				index++;
			}
			if (sum % 2 == 0) {
				sums[4]++;
			}
			else {
				sums[5]++;
			}
		}
		fx(1 << ((N-N / 2) - N / 4)) {
			int y = x;
			int index = 0;
			int sum = 0;
			while ((y >> index) > 0) {
				if (((y >> index) & 1) == 1) {
					sum += A[index + N*3 / 4];
				}
				index++;
			}
			if (sum % 2 == 0) {
				sums[6]++;
			}
			else {
				sums[7]++;
			}
		}
		//doublece((sums[2] + sums[3]), (1 << (N - N / 2)))
		ll evenFirst = sums[0] * sums[2] + sums[1] * sums[3];
		ll oddFirst = sums[0] * sums[3] + sums[1] * sums[2];
		ll evenSecond = sums[4] * sums[6] + sums[5] * sums[7];
		ll oddSecond = sums[4] * sums[7] + sums[5] * sums[6];
		if (P == 0) {
			ce(evenFirst * evenSecond + oddFirst * oddSecond)
		}
		else {
			ce(evenFirst * oddSecond + oddFirst * evenSecond)
		}
	}


    return 0;
}



Measured memory_bytes: 256