#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define FOE(i, s, t) for (int i = s; i <= t; i++)
#define K 200001
int n;
vector<int> nxt[K];
int m;
int dfs[K], sig, eve, bip, bi, col[K];
void DFS(int u, int co){
dfs[u] = 1;
col[u] = co;
for (int i = 0; i < nxt[u].size(); i++) if (!dfs[nxt[u][i]])
DFS(nxt[u][i], 1 - co);
else if (col[nxt[u][i]] == col[u]) bip = 0;
}
int main(){
scanf("%d%d", &n, &m);
FOE(i, 1, m){
int c, d; scanf("%d%d", &c, &d);
nxt[c].push_back(d);
nxt[d].push_back(c);
}
FOE(i, 1, n) if (!dfs[i]){
bip = 1;
DFS(i, 0);
if (nxt[i].size() == 0) sig++; else if (bip) bi++; else eve++;
}
long long ret = 0;
// printf("%d %d %d\n", sig, eve, bi);
// 1: same sig com
// 2: sig - eve
//
// printf("%lld\n", ret);
ret = ret + (long long)sig * n * 2 - sig;
// printf("%lld\n", ret);
// 3: sig - sig, same
ret = ret + eve;
ret = ret + bi * 2;
// 4: sig - sig, diff
// printf("MID %lld\n", ret);
ret = ret + (long long) eve * (eve - 1) * 2;
ret = ret + (long long) bi * (bi - 1) * 4;
ret = ret + (long long) eve * bi * 2;
// printf("%lld\n", ret);
printf("%lld\n", ret);
}