#3問目

NM = input().split()

N,M = int(NM[0]), int(NM[1])

A = set([int(eval(input())) for _ in range(M)])

dp = [0] * (N+1)

dp[0] = 1

dp[1] = 1

MOD = 1000000007

    

if(1 in A):

    dp[1] = 0



for i in range(2, N+1):

    #貰うdp

    if(i in A):

        dp[i] = 0

    else:

        dp[i] = dp[i-1] + dp[i-2]

    dp[i] %=MOD

    

print((dp[N]))
#3問目

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

A = set({})

MAX = 1000000007

for i in range(M):

    a = int(eval(input()))

    A.add(a)

dp = [0] * (N+1)

dp[0] = 1

if 1 in A:

    dp[1] = 0

else:

    dp[1] = 1

    

for i in range(2, N+1):

    if i in A:

        dp[i] = 0

    else:

        #あきがなかったら

        dp[i] = (dp[i-2] + dp[i-1])%MAX

print((dp[N]))
# 3問目
NM = input().split()
N, M = int(NM[0]), int(NM[1])
A = set([int(eval(input())) for _ in range(M)])
dp = [0] * (N + 1)
dp[0] = 1
dp[1] = 1
MOD = 1000000007
if 1 in A:
    dp[1] = 0
for i in range(2, N + 1):
    # 貰うdp
    if i in A:
        dp[i] = 0
    else:
        dp[i] = dp[i - 1] + dp[i - 2]
    dp[i] %= MOD
print((dp[N]))

# 3問目
N, M = list(map(int, input().split()))
A = set({})
MAX = 1000000007
for i in range(M):
    a = int(eval(input()))
    A.add(a)
dp = [0] * (N + 1)
dp[0] = 1
if 1 in A:
    dp[1] = 0
else:
    dp[1] = 1
for i in range(2, N + 1):
    if i in A:
        dp[i] = 0
    else:
        # あきがなかったら
        dp[i] = (dp[i - 2] + dp[i - 1]) % MAX
print((dp[N]))

-NM = input().split() -N, M = int(NM[0]), int(NM[1]) -A = set([int(eval(input())) for _ in range(M)]) +N, M = list(map(int, input().split())) +A = set({}) +MAX = 1000000007 +for i in range(M): +    a = int(eval(input())) +    A.add(a) -dp[1] = 1 -MOD = 1000000007 +else: +    dp[1] = 1 -    # 貰うdp -        dp[i] = dp[i - 1] + dp[i - 2] -    dp[i] %= MOD +        # あきがなかったら +        dp[i] = (dp[i - 2] + dp[i - 1]) % MAX