# C - Typical Stairs
N,M = map(int,input().split())
A = [int(input()) for _ in range(M)]
A = set(A)

# dp[i]: i 段目まで来た時の移動方法の総数
dp = [0]*(N+1)

# 初期条件
dp[0] = 1

for v in range(1,N+1):
    if v in A:
        continue
    dp[v] = (dp[v] + dp[v-1])%(1000000007)
    if v > 1:
        dp[v] = (dp[v] + dp[v-2])%(1000000007)
print(dp[N]) N,M = map(int,input().split()) N map(int,input().split()) map int input().split() ().split () input split M int(input()) for _ in range(M) for _ in range(M) _ range(M) range M for _ in range(M) int(input()) int input() input A = [int(input()) for _ in range(M)] A [int(input()) for _ in range(M)] A = set(A) A set(A) set A dp = [0]*(N+1) dp [0]*(N+1) [0] 0 N+1 N 1 dp[0] = 1 dp[0] dp 0 1 for v in range(1,N+1):
    if v in A:
        continue
    dp[v] = (dp[v] + dp[v-1])%(1000000007)
    if v > 1:
        dp[v] = (dp[v] + dp[v-2])%(1000000007) v range(1,N+1) range 1 N+1 N 1 if v in A:
        continue
     v in A v A continue dp[v] = (dp[v] + dp[v-1])%(1000000007) dp[v] dp v (dp[v] + dp[v-1])%(1000000007) dp[v] + dp[v-1] dp[v] dp v dp[v-1] dp v-1 v 1 1000000007 if v > 1:
        dp[v] = (dp[v] + dp[v-2])%(1000000007) v > 1 v 1 dp[v] = (dp[v] + dp[v-2])%(1000000007) dp[v] dp v (dp[v] + dp[v-2])%(1000000007) dp[v] + dp[v-2] dp[v] dp v dp[v-2] dp v-2 v 2 1000000007 print(dp[N]) print dp[N] dp N A = [int(input()) for _ in range(M)] [int(input()) for _ in range(M)] A dp = [0]*(N+1) [0]*(N+1) dp M = map(int,input().split()) map(int,input().split()) M A = set(A) set(A) A N,M = map(int,input().split()) map(int,input().split()) N
# C - Typical Stairs
N,M = map(int,input().split())
A = [int(input()) for _ in range(M)]
A = set(A)

# dp[i]: i 段目まで来た時の移動方法の総数
dp = [0]*(N+1)

# 初期条件
dp[0] = 1

for v in range(1,N+1):
    if v in A:
        continue
    dp[v] = (dp[v] + dp[v-1])%(1000000007)
    if v > 1:
        dp[v] = (dp[v] + dp[v-2])%(1000000007)
print(dp[N])