#include<bits/stdc++.h>

#define F first
#define S second
#define pb push_back
#define ll long long
#define int long long

using namespace std ;

const int MAXN = 1001 * 1001 ; 

vector<int> adj[MAXN] , val ; 

bool mark[MAXN] ; 

int col[MAXN] ; 

int f = 0 , cnt = 0 ;

void dfs(int u)
{
	cnt ++ ; 
	for(auto v : adj[u])
	{
		int C = 1 - col[u] ; 
		if(mark[v])
		{
			if(col[v]!=C)
				f = 1 ;
			continue ; 
		}
		mark[v] = 1 ; 
		col[v] = C ;
		dfs(v) ; 
	}
}

int32_t main()
{
	ios::sync_with_stdio(0) ; cin.tie(0) ; 
	int n , m ; 
	cin >> n >> m ;
    int n1 = 0 , n2 = 0 , n3 = 0 ; 
	for(int i = 0 ; i < m ; i ++ ) 
	{
		int x , y ;
		cin >> x >> y ;
		adj[x].pb(y) ; 
		adj[y].pb(x) ; 
	}	
	for(int i = 1 ; i <= n ; i ++ )
	{
		if(!mark[i])
		{
			f = 0 ;
			cnt = 0 ;
			dfs(i) ; 
			if(cnt == 1 ) n1 ++ ;
			else if(!f) n2 ++ ; 
			else n3 ++ ; 
		}
	}
	int ans = n1 * n + (n-n1) * n1 ; 
	ans += n3 * n3 ; 
	ans += n3 * n2 ;
	ans += n3 * n2 ; 
	ans += n2 * 2 * n2 ; 
    cout << ans << '\n' ; 	
}