def C(n,m):

    S=1

    for i in range(1,n+1):

        S=S*i

    for i in range(1,m+1):

        S=S//i

    for i in range(1,n-m+1):

        S=S//i

    return S

N,P=list(map(int,input().split()))

A=[int(i) for i in input().split()]

X=0;Y=0

#X:偶数

#Y:奇数

for i in range(N):

    if A[i]%2==0:

        X+=1

    else:

        Y+=1

Z=0

for i in range(Y+1):

    if i%2==P:

        Z+=C(Y,i)

print((Z*2**(X)))

'''

方針：各Aiをそれぞれ見て、いくつ偶数があっていくつ奇数があるかを数える。

以下偶数がX個、奇数がY個あるとする。(X+Y=N,0≦X,Y)

そしてこの問題は偶数の集合の中からの選ぶことと奇数の集合の中から選ぶことを独立に考えることができる。

よって（偶数の集合からの選び方）×（奇数の集合からの選び方）で求めることができる。

（偶数の集合からの選び方）については、どのように選んでも全体の合計を2で割った余りは変わらないので全事象を考えることができる。

よって2^Xである。

（奇数の集合からの選び方）についてはY個のうちk個（k≡P mod 2）である場合の数の合計なので

Σ[k:0→Y and k≡P mod 2]C(Y,k)である。

ただし、C(Y,k)は二項係数を表していて、Σ[k:0→Y and k≡P mod 2]は0≦k≦Nかつk≡P mod 2であるものすべてを足し合わせたという意味である。

'''

def C(n,m):

    S=1

    for i in range(1,n+1):

        S=S*i

    for i in range(1,m+1):

        S=S//i

    for i in range(1,n-m+1):

        S=S//i

    return S

N,P=list(map(int,input().split()))

A=[int(i) for i in input().split()]

X=0;Y=0

#X:偶数

#Y:奇数

for i in range(N):

    if A[i]%2==0:

        X+=1

    else:

        Y+=1

Z=0

for i in range(Y+1):

    if i%2==P:

        Z+=C(Y,i)

print((Z*2**(X)))

def C(n, m):
    S = 1
    for i in range(1, n + 1):
        S = S * i
    for i in range(1, m + 1):
        S = S // i
    for i in range(1, n - m + 1):
        S = S // i
    return S


N, P = list(map(int, input().split()))
A = [int(i) for i in input().split()]
X = 0
Y = 0
# X:偶数
# Y:奇数
for i in range(N):
    if A[i] % 2 == 0:
        X += 1
    else:
        Y += 1
Z = 0
for i in range(Y + 1):
    if i % 2 == P:
        Z += C(Y, i)
print((Z * 2 ** (X)))

"""
方針：各Aiをそれぞれ見て、いくつ偶数があっていくつ奇数があるかを数える。
以下偶数がX個、奇数がY個あるとする。(X+Y=N,0≦X,Y)
そしてこの問題は偶数の集合の中からの選ぶことと奇数の集合の中から選ぶことを独立に考えることができる。
よって（偶数の集合からの選び方）×（奇数の集合からの選び方）で求めることができる。
（偶数の集合からの選び方）については、どのように選んでも全体の合計を2で割った余りは変わらないので全事象を考えることができる。
よって2^Xである。
（奇数の集合からの選び方）についてはY個のうちk個（k≡P mod 2）である場合の数の合計なので
Σ[k:0→Y and k≡P mod 2]C(Y,k)である。
ただし、C(Y,k)は二項係数を表していて、Σ[k:0→Y and k≡P mod 2]は0≦k≦Nかつk≡P mod 2であるものすべてを足し合わせたという意味である。
"""


def C(n, m):
    S = 1
    for i in range(1, n + 1):
        S = S * i
    for i in range(1, m + 1):
        S = S // i
    for i in range(1, n - m + 1):
        S = S // i
    return S


N, P = list(map(int, input().split()))
A = [int(i) for i in input().split()]
X = 0
Y = 0
# X:偶数
# Y:奇数
for i in range(N):
    if A[i] % 2 == 0:
        X += 1
    else:
        Y += 1
Z = 0
for i in range(Y + 1):
    if i % 2 == P:
        Z += C(Y, i)
print((Z * 2 ** (X)))

+""" +方針：各Aiをそれぞれ見て、いくつ偶数があっていくつ奇数があるかを数える。 +以下偶数がX個、奇数がY個あるとする。(X+Y=N,0≦X,Y) +そしてこの問題は偶数の集合の中からの選ぶことと奇数の集合の中から選ぶことを独立に考えることができる。 +よって（偶数の集合からの選び方）×（奇数の集合からの選び方）で求めることができる。 +（偶数の集合からの選び方）については、どのように選んでも全体の合計を2で割った余りは変わらないので全事象を考えることができる。 +よって2^Xである。 +（奇数の集合からの選び方）についてはY個のうちk個（k≡P mod 2）である場合の数の合計なので +Σ[k:0→Y and k≡P mod 2]C(Y,k)である。 +ただし、C(Y,k)は二項係数を表していて、Σ[k:0→Y and k≡P mod 2]は0≦k≦Nかつk≡P mod 2であるものすべてを足し合わせたという意味である。 +""" + +