using System;
using System.Collections.Generic;

namespace AtCoder_CSharp
{
    class AtCoder
    {
        static void Main(string[] args)
        {
            int N, M;
            string[] input = Console.ReadLine().Split(' ');

            N = int.Parse(input[0]);
            M = int.Parse(input[1]);

            List<int> stair = new List<int>();

            for(int i = 0; i < M; i++)
            {
                stair.Add(int.Parse(Console.ReadLine()));
                if (i > 0 && (Math.Abs(stair[i] - stair[i - 1]) == 1))
                {
                    Console.WriteLine(0);
                    return;
                }
            }

            int a = 0;

            for (int i = 0; i < stair.Count; i++)
            {
                int nowstair;
                if (i == 0)
                {
                    nowstair = 0;
                }
                else
                {
                    nowstair = stair[i - 1];
                }
                a += (int)Math.Pow(2, stair[i] - nowstair) + 1;
            }

            Console.WriteLine(a % 1000000007);

        }
    }
}
