#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np
s = list(map(int, input().split()))
N = s[0]
M = s[1]

def fib(n):
    a, b = 0, 1
    for i in range(n):
        a, b = b, a + b
    return b


broken = np.array([int(input()) for i in range(M)])
broken = np.append(-1,broken)
broken = np.append(broken,N+1)
#  -1段目とN+1段目が壊れていると表記して一貫した計算が可能に

gaps = np.array([])  # 壊れている段の間にある壊れていない段数
for i in range(M+1):
    gaps = np.append(gaps, broken[i+1]-broken[i]-1)

gaps = np.array(gaps, np.int)  # 整数列に変換
if 0 in gaps:
    print(0)
else:
    patterns = 1
    for i in range(len(gaps)):
        patterns *= fib(gaps[i]-1)
    print(patterns % 1000000007)
