N, M = map(int, input().split())
A = [True]*N
for _ in range(M):
  a = int(input())
  A[a-1] = False # 壊れてるところはfalse

waru = 10**9 + 7
dp = [0]*(N+1)

dp[0], dp[1] = 1, 1 # 初期条件
if not A[0]: # 1段目が壊れてたら
  dp[1] = 0

for i in range(2,N+1):
  # 壊れてるところはdp=0にする
  if not A[i-1]:
    dp[i] = 0
  else:
    dp[i] = (dp[i-1] + dp[i-2])%waru
print(dp[-1]) N, M = map(int, input().split()) N map(int, input().split()) map int input().split() ().split () input split M A = [True]*N A [True]*N [True] True N for _ in range(M):
  a = int(input())
  A[a-1] = False # 壊れてるところはfalse _ range(M) range M a = int(input()) a int(input()) int input() input A[a-1] = False A[a-1] A a-1 a 1 False waru = 10**9 + 7 waru 10**9 + 7 10**9 10 9 7 dp = [0]*(N+1) dp [0]*(N+1) [0] 0 N+1 N 1 dp[0], dp[1] = 1, 1 dp[0] dp 0 1 dp[1] dp 1 1 if not A[0]: # 1段目が壊れてたら
  dp[1] = 0 not A[0] A[0] A 0 dp[1] = 0 dp[1] dp 1 0 for i in range(2,N+1):
  # 壊れてるところはdp=0にする
  if not A[i-1]:
    dp[i] = 0
  else:
    dp[i] = (dp[i-1] + dp[i-2])%waru i range(2,N+1) range 2 N+1 N 1 if not A[i-1]:
    dp[i] = 0
  else:
    dp[i] = (dp[i-1] + dp[i-2])%waru not A[i-1] A[i-1] A i-1 i 1 dp[i] = 0 dp[i] dp i 0 dp[i] = (dp[i-1] + dp[i-2])%waru dp[i] dp i (dp[i-1] + dp[i-2])%waru dp[i-1] + dp[i-2] dp[i-1] dp i-1 i 1 dp[i-2] dp i-2 i 2 waru print(dp[-1]) print dp[-1] dp -1 A = [True]*N [True]*N A a = int(input()) int(input()) a waru = 10**9 + 7 10**9 + 7 waru 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())
A = [True]*N
for _ in range(M):
  a = int(input())
  A[a-1] = False # 壊れてるところはfalse

waru = 10**9 + 7
dp = [0]*(N+1)

dp[0], dp[1] = 1, 1 # 初期条件
if not A[0]: # 1段目が壊れてたら
  dp[1] = 0

for i in range(2,N+1):
  # 壊れてるところはdp=0にする
  if not A[i-1]:
    dp[i] = 0
  else:
    dp[i] = (dp[i-1] + dp[i-2])%waru
print(dp[-1])