N,M = map(int, input().split() )
list_Am = []

list_Stairs = []

for i in range(M):
    list_Am.append(int(input()))
# print(str(list_Am))

## Anにはスタート合わせて何段あるかが入る
for j,An in enumerate(list_Am):
    if j == 0:
        list_Stairs.append(An)
    else:
        list_Stairs.append(An-list_Am[j-1]-1)
list_Stairs.append(N-list_Am[-1])
        
# print(str(list_Stairs))

## スタートを0としてn段目までか（スタート合わせてn+1段ある）
def endFib(n, a1 = 1, a2 = 1):
    if (n < 2): 
        return a1
    else:
        return endFib(n-1, a1 + a2, a1)

result = 1
if 0 in list_Stairs:
    result = 0
else:
    for Stair in list_Stairs:
        # print("段数："+str(Stair))
        # print(str(endFib(Stair-1)))
        result = result * endFib(Stair-1)
        result = result % 1000000007

print(str(result))

"""
if __name__ == "__main__":
    for i in range(10):
        print(str(endFib(i)))
"""