import sys, re

from collections import deque, defaultdict, Counter

from math import ceil, sqrt, hypot, factorial, pi, sin, cos, tan, asin, acos, atan, radians, degrees#, log2

from itertools import accumulate, permutations, combinations, combinations_with_replacement, product, groupby

from operator import itemgetter, mul

from copy import deepcopy

from string import ascii_lowercase, ascii_uppercase, digits

from bisect import bisect, bisect_left, insort, insort_left

from fractions import gcd

from heapq import heappush, heappop

from functools import reduce

def input(): return sys.stdin.readline().strip()

def INT(): return int(eval(input()))

def MAP(): return list(map(int, input().split()))

def LIST(): return list(map(int, input().split()))

def ZIP(n): return list(zip(*(MAP() for _ in range(n))))

sys.setrecursionlimit(10 ** 9)

INF = float('inf')

mod = 10**9 + 7



N, M = MAP()

a = [INT() for _ in range(M)]



check = [0]*(N+1)

for i in a:

	check[i] = 1



dp = [0]*(N+1)

dp[0] = 1

dp[1] = 1

for i in range(2, N+1):

	for j in range(1, 3):

		if not check[i-j]:

			dp[i] = (dp[i] + dp[i-j])%mod



print((dp[N]))

import sys, re

from collections import deque, defaultdict, Counter

from math import ceil, sqrt, hypot, factorial, pi, sin, cos, tan, asin, acos, atan, radians, degrees#, log2

from itertools import accumulate, permutations, combinations, combinations_with_replacement, product, groupby

from operator import itemgetter, mul

from copy import deepcopy

from string import ascii_lowercase, ascii_uppercase, digits

from bisect import bisect, bisect_left, insort, insort_left

from fractions import gcd

from heapq import heappush, heappop

from functools import reduce

def input(): return sys.stdin.readline().strip()

def INT(): return int(eval(input()))

def MAP(): return list(map(int, input().split()))

def LIST(): return list(map(int, input().split()))

def ZIP(n): return list(zip(*(MAP() for _ in range(n))))

sys.setrecursionlimit(10 ** 9)

INF = float('inf')

mod = 10**9 + 7



N, M = MAP()

a = [INT() for _ in range(M)]



dp = [0]*(N+1)

dp[0] = 1

dp[1] = 1



check = [0]*(N+1)

for i in a:

	check[i] = 1



if check[1] == 1:

	dp[1] = 0



for i in range(2, N+1):

	if not check[i]:

		dp[i] = (dp[i-1] + dp[i-2])%mod



print((dp[N]))

import sys, re
from collections import deque, defaultdict, Counter
from math import (
    ceil,
    sqrt,
    hypot,
    factorial,
    pi,
    sin,
    cos,
    tan,
    asin,
    acos,
    atan,
    radians,
    degrees,
)  # , log2
from itertools import (
    accumulate,
    permutations,
    combinations,
    combinations_with_replacement,
    product,
    groupby,
)
from operator import itemgetter, mul
from copy import deepcopy
from string import ascii_lowercase, ascii_uppercase, digits
from bisect import bisect, bisect_left, insort, insort_left
from fractions import gcd
from heapq import heappush, heappop
from functools import reduce


def input():
    return sys.stdin.readline().strip()


def INT():
    return int(eval(input()))


def MAP():
    return list(map(int, input().split()))


def LIST():
    return list(map(int, input().split()))


def ZIP(n):
    return list(zip(*(MAP() for _ in range(n))))


sys.setrecursionlimit(10**9)
INF = float("inf")
mod = 10**9 + 7
N, M = MAP()
a = [INT() for _ in range(M)]
check = [0] * (N + 1)
for i in a:
    check[i] = 1
dp = [0] * (N + 1)
dp[0] = 1
dp[1] = 1
for i in range(2, N + 1):
    for j in range(1, 3):
        if not check[i - j]:
            dp[i] = (dp[i] + dp[i - j]) % mod
print((dp[N]))

import sys, re
from collections import deque, defaultdict, Counter
from math import (
    ceil,
    sqrt,
    hypot,
    factorial,
    pi,
    sin,
    cos,
    tan,
    asin,
    acos,
    atan,
    radians,
    degrees,
)  # , log2
from itertools import (
    accumulate,
    permutations,
    combinations,
    combinations_with_replacement,
    product,
    groupby,
)
from operator import itemgetter, mul
from copy import deepcopy
from string import ascii_lowercase, ascii_uppercase, digits
from bisect import bisect, bisect_left, insort, insort_left
from fractions import gcd
from heapq import heappush, heappop
from functools import reduce


def input():
    return sys.stdin.readline().strip()


def INT():
    return int(eval(input()))


def MAP():
    return list(map(int, input().split()))


def LIST():
    return list(map(int, input().split()))


def ZIP(n):
    return list(zip(*(MAP() for _ in range(n))))


sys.setrecursionlimit(10**9)
INF = float("inf")
mod = 10**9 + 7
N, M = MAP()
a = [INT() for _ in range(M)]
dp = [0] * (N + 1)
dp[0] = 1
dp[1] = 1
check = [0] * (N + 1)
for i in a:
    check[i] = 1
if check[1] == 1:
    dp[1] = 0
for i in range(2, N + 1):
    if not check[i]:
        dp[i] = (dp[i - 1] + dp[i - 2]) % mod
print((dp[N]))

+dp = [0] * (N + 1) +dp[0] = 1 +dp[1] = 1 -dp = [0] * (N + 1) -dp[0] = 1 -dp[1] = 1 +if check[1] == 1: +    dp[1] = 0 -    for j in range(1, 3): -        if not check[i - j]: -            dp[i] = (dp[i] + dp[i - j]) % mod +    if not check[i]: +        dp[i] = (dp[i - 1] + dp[i - 2]) % mod