N, M = map(int, input().split())
 
# issafe => 0段目からN段目まで, 安全ならTrue, 壊れているならFalse
issafe = [1] * (N+1)
for i in range(M):
  a = int(input())
  issafe[a] = 0

# 動的計画法（漸化式）
# dp => 0段目からN段目まで, その移動方法の数
dp = [0] * (N+1)
dp[0] = 1
if issafe[1]: dp[1] = 1
for i in range(2, N+1):
  if issafe[i-1]: dp[i] += dp[i-1]
  if issafe[i-2]: dp[i] += dp[i-2]
  dp[i] %= 10**9+7
    
print(dp[N]) N, M = map(int, input().split()) N map(int, input().split()) map int input().split() ().split () input split M issafe = [1] * (N+1) issafe [1] * (N+1) [1] 1 N+1 N 1 for i in range(M):
  a = int(input())
  issafe[a] = 0

# 動的計画法（漸化式）
# dp => 0段目からN段目まで, その移動方法の数 i range(M) range M a = int(input()) a int(input()) int input() input issafe[a] = 0 issafe[a] issafe a 0 dp = [0] * (N+1) dp [0] * (N+1) [0] 0 N+1 N 1 dp[0] = 1 dp[0] dp 0 1 if issafe[1]: dp[1] = 1 issafe[1] issafe 1 for i in range(2, N+1):
  if issafe[i-1]: dp[i] += dp[i-1]
  if issafe[i-2]: dp[i] += dp[i-2]
  dp[i] %= 10**9+7
     i range(2, N+1) range 2 N+1 N 1 if issafe[i-1]: dp[i] += dp[i-1]
   issafe[i-1] issafe i-1 i 1 if issafe[i-2]: dp[i] += dp[i-2]
   issafe[i-2] issafe i-2 i 2 dp[i] %= 10**9+7 dp[i] dp i 10**9+7 10**9 10 9 7 print(dp[N]) print dp[N] dp N issafe = [1] * (N+1) [1] * (N+1) issafe a = int(input()) int(input()) a N, M = map(int, input().split()) map(int, input().split()) N M = map(int, input().split()) map(int, input().split()) M dp = [0] * (N+1) [0] * (N+1) dp
N, M = map(int, input().split())
 
# issafe => 0段目からN段目まで, 安全ならTrue, 壊れているならFalse
issafe = [1] * (N+1)
for i in range(M):
  a = int(input())
  issafe[a] = 0

# 動的計画法（漸化式）
# dp => 0段目からN段目まで, その移動方法の数
dp = [0] * (N+1)
dp[0] = 1
if issafe[1]: dp[1] = 1
for i in range(2, N+1):
  if issafe[i-1]: dp[i] += dp[i-1]
  if issafe[i-2]: dp[i] += dp[i-2]
  dp[i] %= 10**9+7
    
print(dp[N])