#include<bits/stdc++.h>
#define mod 1000000007
using namespace std;
typedef long long ll;
struct matrix{
	int a[3][3];
	matrix(){memset(a,0,sizeof(a));}
	matrix operator*(const matrix& ma)const{
		matrix res;
		for(int i=0;i<3;++i)
			for(int j=0;j<3;++j)
				for(int k=0;k<3;++k)
					res.a[i][j]=(res.a[i][j]+1ll*a[i][k]*ma.a[k][j])%mod;
		return res;
	}
	void print(){
		for(int i=0;i<3;++i,puts(""))
			for(int j=0;j<3;++j)
				printf("%d ",a[i][j]);
	}
};
matrix get(int x){
	matrix ans,tmp;
	for(int i=0;i<3;++i)ans.a[i][i]=1;
	tmp.a[0][0]=1,tmp.a[0][1]=0,tmp.a[0][2]=1;
	tmp.a[1][0]=2,tmp.a[1][1]=1,tmp.a[1][2]=2;
	tmp.a[2][0]=1,tmp.a[2][1]=1,tmp.a[2][2]=2;
	for(;x;x>>=1,tmp=tmp*tmp)
		if(x&1)ans=ans*tmp;
	return ans;
}
int n,m,x=1,y=2,z=1;
int main(){
	scanf("%d%d",&n,&m);
	int lst=1;
	for(int i=1,a;i<=m;++i){
		scanf("%d",&a);
		matrix A=get(a-lst);
		int _x=(1ll*x*A.a[0][0]+1ll*y*A.a[0][1]+1ll*z*A.a[0][2])%mod;
		int _y=(1ll*x*A.a[1][0]+1ll*y*A.a[1][1]+1ll*z*A.a[1][2])%mod;
		int _z=(1ll*x*A.a[2][0]+1ll*y*A.a[2][1]+1ll*z*A.a[2][2])%mod;
		x=_x,y=_y,z=_z;
		_x=x;
		_y=(2ll*x+y)%mod;
		_z=(1ll*x+y+z)%mod;
		x=_x,y=_y,z=_z;
		lst=a+1;
	}
	matrix A=get(n-lst);
	int _x=(1ll*x*A.a[0][0]+1ll*y*A.a[0][1]+1ll*z*A.a[0][2])%mod;
	int _y=(1ll*x*A.a[1][0]+1ll*y*A.a[1][1]+1ll*z*A.a[1][2])%mod;
	int _z=(1ll*x*A.a[2][0]+1ll*y*A.a[2][1]+1ll*z*A.a[2][2])%mod;
	x=_x,y=_y,z=_z;
	printf("%d",z);
	
}