n, m = list(map(int, input().split()))

a = set(map(int, [eval(input()) for _ in range(m)]))



dp = [0] * (n+1)

# 0段目と1段目は1通り（但し、１段目が壊れていない場合）（0 段目は「なにもしない」という から1 通り）

dp[:2] = 1, 1 if 1 not in a else 0 



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

    if i not in a:

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



print((dp[-1] % (10**9+7)))

n, m = list(map(int, input().split()))

a = set(map(int, [eval(input()) for _ in range(m)]))



dp = [0] * (n+1)

# 0段目と1段目は1通り（但し、１段目が壊れていない場合）（0 段目は「なにもしない」という から1 通り）

dp[:2] = 1, 1 if 1 not in a else 0 



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

    if i not in a:

        dp[i] = ((dp[i-1] + dp[i-2]) % (10**9+7))



print((dp[-1]))

n, m = list(map(int, input().split()))
a = set(map(int, [eval(input()) for _ in range(m)]))
dp = [0] * (n + 1)
# 0段目と1段目は1通り（但し、１段目が壊れていない場合）（0 段目は「なにもしない」という から1 通り）
dp[:2] = 1, 1 if 1 not in a else 0
for i in range(2, n + 1):
    if i not in a:
        dp[i] = dp[i - 1] + dp[i - 2]
print((dp[-1] % (10**9 + 7)))

n, m = list(map(int, input().split()))
a = set(map(int, [eval(input()) for _ in range(m)]))
dp = [0] * (n + 1)
# 0段目と1段目は1通り（但し、１段目が壊れていない場合）（0 段目は「なにもしない」という から1 通り）
dp[:2] = 1, 1 if 1 not in a else 0
for i in range(2, n + 1):
    if i not in a:
        dp[i] = (dp[i - 1] + dp[i - 2]) % (10**9 + 7)
print((dp[-1]))

-        dp[i] = dp[i - 1] + dp[i - 2] -print((dp[-1] % (10**9 + 7))) +        dp[i] = (dp[i - 1] + dp[i - 2]) % (10**9 + 7) +print((dp[-1]))