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)]



fib_list = [0]*(N+1)

fib_list[0] = 1

fib_list[1] = 1



def fib(n):

	if n < 2:

		return fib_list[n]

	elif fib_list[n] != 0:

		return fib_list[n]

	else:

		fib_list[n] = fib(n-1) + fib(n-2)

		return fib_list[n]



tmp = -1

ans = 1



for x in a:

	#print(tmp, x)

	if x == tmp+1:

		print((0))

		exit()

	else:

		ans = ans*fib(x-tmp-2)%mod

		tmp = x



ans = ans*fib(N-tmp-1)%mod

print(ans) 









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 = deque([INT() for _ in range(M)])

a.append(0)



dp = [0]*(N+1)

dp[0] = 1

dp[1] = 1



if a[0] == 1:

	dp[1] = 0

	a.popleft()



q = a.popleft()

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

	if i == q:

		dp[i] = 0

		q = a.popleft()

	else:

		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)]
fib_list = [0] * (N + 1)
fib_list[0] = 1
fib_list[1] = 1


def fib(n):
    if n < 2:
        return fib_list[n]
    elif fib_list[n] != 0:
        return fib_list[n]
    else:
        fib_list[n] = fib(n - 1) + fib(n - 2)
        return fib_list[n]


tmp = -1
ans = 1
for x in a:
    # print(tmp, x)
    if x == tmp + 1:
        print((0))
        exit()
    else:
        ans = ans * fib(x - tmp - 2) % mod
        tmp = x
ans = ans * fib(N - tmp - 1) % mod
print(ans)

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 = deque([INT() for _ in range(M)])
a.append(0)
dp = [0] * (N + 1)
dp[0] = 1
dp[1] = 1
if a[0] == 1:
    dp[1] = 0
    a.popleft()
q = a.popleft()
for i in range(2, N + 1):
    if i == q:
        dp[i] = 0
        q = a.popleft()
    else:
        dp[i] = (dp[i - 1] + dp[i - 2]) % mod
print((dp[N]))

-a = [INT() for _ in range(M)] -fib_list = [0] * (N + 1) -fib_list[0] = 1 -fib_list[1] = 1 - - -def fib(n): -    if n < 2: -        return fib_list[n] -    elif fib_list[n] != 0: -        return fib_list[n] +a = deque([INT() for _ in range(M)]) +a.append(0) +dp = [0] * (N + 1) +dp[0] = 1 +dp[1] = 1 +if a[0] == 1: +    dp[1] = 0 +    a.popleft() +q = a.popleft() +for i in range(2, N + 1): +    if i == q: +        dp[i] = 0 +        q = a.popleft() -        fib_list[n] = fib(n - 1) + fib(n - 2) -        return fib_list[n] - - -tmp = -1 -ans = 1 -for x in a: -    # print(tmp, x) -    if x == tmp + 1: -        print((0)) -        exit() -    else: -        ans = ans * fib(x - tmp - 2) % mod -        tmp = x -ans = ans * fib(N - tmp - 1) % mod -print(ans) +        dp[i] = (dp[i - 1] + dp[i - 2]) % mod +print((dp[N]))