N,M = (int(x) for x in input().split())
Broken = [True]*(N+1)
for TM in range(0,M):
    Broken[int(input())] = False
DP = [1]+[0]*N
for Now in range(0,N):
    for Next in range(Now+1,min(N+1,Now+3)):
        if Broken[Next]==True:
            DP[Next] = (DP[Next]+DP[Now])%1000000007
print(DP[N]) int(x) for x in input().split() for x in input().split() x input().split() ().split () input split for x in input().split() int(x) int x N,M = (int(x) for x in input().split()) N (int(x) for x in input().split()) M Broken = [True]*(N+1) Broken [True]*(N+1) [True] True N+1 N 1 for TM in range(0,M):
    Broken[int(input())] = False TM range(0,M) range 0 M Broken[int(input())] = False Broken[int(input())] Broken int(input()) int input() input False DP = [1]+[0]*N DP [1]+[0]*N [1] 1 [0]*N [0] 0 N for Now in range(0,N):
    for Next in range(Now+1,min(N+1,Now+3)):
        if Broken[Next]==True:
            DP[Next] = (DP[Next]+DP[Now])%1000000007 Now range(0,N) range 0 N for Next in range(Now+1,min(N+1,Now+3)):
        if Broken[Next]==True:
            DP[Next] = (DP[Next]+DP[Now])%1000000007 Next range(Now+1,min(N+1,Now+3)) range Now+1 Now 1 min(N+1,Now+3) min N+1 N 1 Now+3 Now 3 if Broken[Next]==True:
            DP[Next] = (DP[Next]+DP[Now])%1000000007 Broken[Next]==True Broken[Next] Broken Next True DP[Next] = (DP[Next]+DP[Now])%1000000007 DP[Next] DP Next (DP[Next]+DP[Now])%1000000007 DP[Next]+DP[Now] DP[Next] DP Next DP[Now] DP Now 1000000007 print(DP[N]) print DP[N] DP N Broken = [True]*(N+1) [True]*(N+1) Broken DP = [1]+[0]*N [1]+[0]*N DP N,M = (int(x) for x in input().split()) (int(x) for x in input().split()) N M = (int(x) for x in input().split()) (int(x) for x in input().split()) M
N,M = (int(x) for x in input().split())
Broken = [True]*(N+1)
for TM in range(0,M):
    Broken[int(input())] = False
DP = [1]+[0]*N
for Now in range(0,N):
    for Next in range(Now+1,min(N+1,Now+3)):
        if Broken[Next]==True:
            DP[Next] = (DP[Next]+DP[Now])%1000000007
print(DP[N])