#include<bits/stdc++.h>
using namespace std;
const long long ma=1000000007;
const int maxn=1e+4;
int ff[maxn][maxn];
bool vis[maxn];
int n,m;
//long long sum;
//void jisuan(bool v[]k,int summ){
//	if(check(v)){
//		sum+=pow(2,summ);
//		return;	
//	}
//	for(int i=1;i<=n;i++){
//	}
//}
//void dfs(int cnt){
//	if(cnt==m+1){
//		return ;
//	}
//	for(int i=1;i<=n;i++){
//		vis[i]=1;
//		jisuan(vis,0);
//		dfs(cnt+1);
//		vis[i]=0;
//	}
//}
int main(){
	freopen("barrack.in","r",stdin);
	freopen("barrack.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++){
		int x,y;
		scanf("%d%d",&x,&y);
		ff[x][y]=1;
		ff[y][x]=1;
	}
	long long ans=pow(2,m);
	if(n==2){
		cout<<ans*2+1;
		return 0;
	}
	if(n==3){
		if(m==2){
			cout<<"17"<<endl;
		}
		else cout<<"41"<<endl;
		return 0;
	}
	return 0;
}
