#include<bits/stdc++.h>

using namespace std;
typedef long long ll;

const int P=1e9+7,M=1030;

struct mat{
	int x[3][3];
	mat(bool f=false){
		memset(x,0,sizeof(x));
		if(f)x[0][0]=x[1][1]=x[2][2]=1;
	}
	inline int* operator[](int i){return x[i];} 
	inline mat friend operator*(mat a,mat b){
		mat c;
		for(int i=0;i<3;i++)for(int j=0;j<3;j++)
			c[i][j]=((ll)a[i][0]*b[0][j]+(ll)a[i][1]*b[1][j]+(ll)a[i][2]*b[2][j])%P;
		return c;
	}
}A,B,R(true),v0[M],v1[M],v2[M];
int n,m,u,v;

inline mat fpa(int t){return v0[t&1023]*v1[t>>10&1023]*v2[t>>20&1023];}

int main(){
	A[0][0]=2,A[0][1]=2,A[0][2]=1;
	A[1][0]=1,A[1][1]=1,A[1][2]=1;
	A[2][0]=1,A[2][1]=0,A[2][2]=1;
	
	v0[0]=v1[0]=v2[0]=R;
	
	v0[1]=A;
	for(int i=2;i<=1024;i++)v0[i]=v0[1]*v0[i-1];
	v1[1]=v0[1024];
	for(int i=2;i<=1024;i++)v1[i]=v1[1]*v1[i-1];
	v2[1]=v1[1024];
	for(int i=2;i<=1024;i++)v2[i]=v2[1]*v2[i-1];
	
	B[0][0]=1,B[0][1]=2,B[0][2]=1;
	B[1][0]=0,B[1][1]=1,B[1][2]=1;
	B[2][0]=0,B[2][1]=0,B[2][2]=1;
	
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++){
		scanf("%d",&v);
		R=R*fpa(v-u-1)*B;
		u=v;
	}
	R=R*fpa(n-u-1);
	
	printf("%d\n",((unsigned)R[0][0]+R[0][1]+R[0][2])%P);
	
	return 0; 
}