N,M = map(int,input().split())
oks = [True]*(N+1)
for i in range(M):
   a = int(input())
   oks[a] = False
dp = [0]*(N+1)
dp[0] = 1
mod = 1000000007
for now in range(N):
    for next in range(now+1,min(N,now+2)+1): #1段または2段すすむ。際集団を超えないように
        if oks[next]: #階段が壊れていなければ
            dp[next] += dp[now]
            dp[next] %= mod
print(dp[N]) N,M = map(int,input().split()) N map(int,input().split()) map int input().split() ().split () input split M oks = [True]*(N+1) oks [True]*(N+1) [True] True N+1 N 1 for i in range(M):
   a = int(input())
   oks[a] = False i range(M) range M a = int(input()) a int(input()) int input() input oks[a] = False oks[a] oks a False dp = [0]*(N+1) dp [0]*(N+1) [0] 0 N+1 N 1 dp[0] = 1 dp[0] dp 0 1 mod = 1000000007 mod 1000000007 for now in range(N):
    for next in range(now+1,min(N,now+2)+1): #1段または2段すすむ。際集団を超えないように
        if oks[next]: #階段が壊れていなければ
            dp[next] += dp[now]
            dp[next] %= mod now range(N) range N for next in range(now+1,min(N,now+2)+1): #1段または2段すすむ。際集団を超えないように
        if oks[next]: #階段が壊れていなければ
            dp[next] += dp[now]
            dp[next] %= mod next range(now+1,min(N,now+2)+1) range now+1 now 1 min(N,now+2)+1 min(N,now+2) min N now+2 now 2 1 if oks[next]: #階段が壊れていなければ
            dp[next] += dp[now]
            dp[next] %= mod oks[next] oks next dp[next] += dp[now] dp[next] dp next dp[now] dp now dp[next] %= mod dp[next] dp next mod print(dp[N]) print dp[N] dp N a = int(input()) int(input()) a dp = [0]*(N+1) [0]*(N+1) dp oks = [True]*(N+1) [True]*(N+1) oks M = map(int,input().split()) map(int,input().split()) M mod = 1000000007 1000000007 mod N,M = map(int,input().split()) map(int,input().split()) N
N,M = map(int,input().split())
oks = [True]*(N+1)
for i in range(M):
   a = int(input())
   oks[a] = False
dp = [0]*(N+1)
dp[0] = 1
mod = 1000000007
for now in range(N):
    for next in range(now+1,min(N,now+2)+1): #1段または2段すすむ。際集団を超えないように
        if oks[next]: #階段が壊れていなければ
            dp[next] += dp[now]
            dp[next] %= mod
print(dp[N])
