#include<bits/stdc++.h>
const int mo=1000000007;
using namespace std;
int n,m,cnt;
struct Mat{
	int a[3][3];
	Mat(){
		memset(a,0,sizeof(a));
	}
	void set(int x,int v0,int v1,int v2){
		a[x][0]=v0; a[x][1]=v1; a[x][2]=v2;
	}
	void set2(){
		set(0,1,0,0);
		set(1,0,1,0);
		set(2,0,0,1);
	}
}t,r,R;
Mat operator *(Mat a,Mat b){
	Mat c;
	for (int i=0;i<3;i++)
		for (int j=0;j<3;j++)
			for (int k=0;k<3;k++)
				c.a[i][j]=(c.a[i][j]+1ll*a.a[i][k]*b.a[k][j])%mo;
	return c;
}
Mat power(Mat a,int v){
	Mat b; b.set2();
	for (;v;v/=2,a=a*a)
		if (v&1) b=b*a;
	return b;
}
int main(){
	scanf("%d%d",&n,&m);
	int cnt=1;
	t.set(0,1,2,4);
	r.set(0,1,1,1);
	r.set(1,0,1,2);
	r.set(2,1,1,2);
	R.set(0,1,0,0);
	R.set(1,0,1,2);
	R.set(2,1,0,1);
	for (int i=1;i<=m;i++){
		int x;
		scanf("%d",&x);
		if (x==1) t.set(0,1,1,3);
		else t=t*power(r,x-cnt-1)*R;
		cnt=x;
	}
	t=t*power(r,n-cnt);
	printf("%d",t.a[0][0]);
}