const p_R = {};
function product_Range(a,b) {
  if(p_R[a+'_'+b]!=undefined){return p_R[a+'_'+b]}
  var prd = a,i = a;
  while (i++< b) {
    prd*=i;
  }
  p_R[a+'_'+b] = prd;
  return prd;
}

const combs = {};
function combinations(n, r) {
  if (n==r || r==0) {
    return 1;
  } else {
    if(combs[n+'_'+r]!=undefined){return combs[n+'_'+r]}
    r=(r < n-r) ? n-r : r;
    var result =  product_Range(r+1, n)/product_Range(1,n-r);
    combs[n+'_'+r] = result;
    return result;
  }
}

function sum_comb(num){
  if (num<=0) {return 1;}
  
  result = 0;
  for(var i=0;i<=num/2;i++){
    result += combinations(num-i, i)
  }
  return result;
}

function main(input){
  const divider = 1000000007
  const lines = input.split('\n')
  const N_M = lines.shift().split(' ').map(x => parseInt(x));
  const N = N_M[0];
  const M = N_M[1];
  const A = []
  for(var i=0;i<M;i++){
    A.push(parseInt(lines.shift()));
  }

  if(M>1){
    for(var i=1;i<M;i++){
      if(A[i]-A[i-1]==1){
        console.log(0);
        return;
      }
    }
  }

  const diffs = [];
  A.unshift(-1);
  A.push(N+1);

  for(var i=1;i<M+2;i++){
    diffs.push(A[i]-A[i-1]-1)
  }

  var result = 1;

  for(diff of diffs){
    //console.log([diff, sum_comb(diff-1), diff/2]);
    result *= sum_comb(diff-1)
    result %= divider
  }

//console.log(result)

result = result%divider;

// 配列抜き出す
// ブロッカーのインデックスを全部取得
// ブロッカーが2連続してたらその場でreturn
// ブロッカーで区切られた要素の升目数を得る
// 升目数から組み合わせ数を得る
// 全部かけて余剰出して終わり

  console.log(result);
}

main(require('fs').readFileSync('/dev/stdin', 'utf8'));

