from sys import stdin
import sys
import numpy as np
from math import factorial
# [【Python】組み合わせ\(nCr\) 計算の高速化 \- Qiita](https://qiita.com/derodero24/items/91b6468e66923a87f39f#%E6%97%A2%E5%AD%98%E3%83%84%E3%83%BC%E3%83%AB%E3%82%92%E7%94%A8%E3%81%84%E3%81%9F%E6%89%8B%E6%B3%95%EF%BC%93%E8%A9%95%E4%BE%A1-)


def get_pattern(num):
    ret = 0

    if num == 1:
        ret = 1
    else:
        for i in range(int(num / 2) + 1):
            n = num - i
            r = i
            tmp = factorial(n) / factorial(r) / factorial(n - r)
            ret = ret + tmp

    return int(ret)


if __name__ == '__main__':
    N, M = [int(x) for x in stdin.readline().rstrip().split()]
    a = [int(input()) for i in range(M)]

    ret = 1

    for j in range(M):

        if j == 0:
            # 0マス目からa[j]-1マスまで移動するパターン数
            ret = ret * get_pattern(a[j]-1)
        elif a[j] - a[j-1] == 1:
            # 危険個所が連続していてパターン最後まで移動できるパターンなし
            ret = 0
            break
        else:
            # a[j-1]+1マスからa[j]-1マスまで移動するパターン数
            ret = ret * get_pattern((a[j]-1) - (a[j-1]+1))

        if j == M - 1:
            # a[j]+1マスからNマスへの移動パターン
            ret = ret * get_pattern(N - (a[j] + 1))

    if M == 0:
        ret = get_pattern(N)

    print(ret % 1000000007)
