#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
const int N=500005;
#define int long long
inline int read(){
	int t=1,x=0;
	char ch=getchar();
	for(;!isdigit(ch);ch=getchar()) if(ch=='-') t=-1;
	for(;isdigit(ch);ch=getchar()) x=(x<<3)+(x<<1)+(ch^48);
	return t*x;
}
int quick_pow(int x,int y){
	int ans;
	for(int i=1;i<=y;i++) ans=(ans*x)%mod;
	return ans;
}
struct node{
	int to,next;
}edge[N<<1];
int head[N],tot;
int n,m;
int ans;
void add(int x,int y){
	tot++;
	edge[tot].to=y;
	edge[tot].next=head[x];
	head[x]=tot;
}
signed main(){
	freopen("barrack.in","r",stdin);
	freopen("barrack.out","w",stdout);
	n=read(),m=read();
	ans=n*quick_pow(2,m);
	for(int i=1;i<=m;i++){
		int x=read(),y=read();
		add(x,y),add(y,x);
	}
	cout<<ans*3/2;
	fclose(stdin),fclose(stdout);
	return 0;
}
