#include<bits/stdc++.h>
//wo hao xiang ting ge
//li zi yuan hen hao he xi wang da jia dou mai
//55555555
using namespace std;
const int N=5e5+5,mod=1e9+7;
struct edge{
	int to,next;
}e[N<<1];int head[N],tot=0;
int n,m,ans=0;
void add(int x,int y){
	e[++tot].to=y;
	e[tot].next=head[x];
	head[x]=tot;
}
//void dfs(int x,int fa){
//	for(int i=head[x];i;i=e[i].next){
//		int v=e[i].to;
//		if(v!=fa){
//			dfs(v,x);
//			
//		}
//	}
//}
int main(){
	freopen("barrack.in","r",stdin);
	freopen("barrack.out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int u,v;
		cin>>u>>v;
		add(u,v),add(v,u);
	}
	ans=3;
	for(int i=1;i<m-1;i++){
		ans=((ans*2)+1)%mod;
	}
	ans=((ans*3)+2)%mod;
	if(n==2) cout<<5<<endl;
	else cout<<ans<<endl;
	return 0;
}