#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 2e5 + 5;
ll nC2(int n) {
if (n < 2) return 0;
return 1ll * n * (n - 1) / 2;
}
int n, m;
vector<int> adj[N];
int num_cc; // Số thành phần liên thông
int cnt[N]; // cnt[i] = Số đỉnh có trong thành phần liên thông thứ i
int cnt_bridge; // Số cạnh cầu
int tin[N], low[N], timer;
int sz[N]; // sz[u] = Số đỉnh có trong cây con gốc u trên cây dfs
void dfs(int u, int p) {
cnt[num_cc]++;
tin[u] = low[u] = ++timer;
sz[u] = 1;
for (int v : adj[u]) {
if (v == p) continue;
if (!tin[v]) {
dfs(v, u);
low[u] = min(low[u], low[v]);
sz[u] += sz[v];
if (low[v] > tin[u]) cnt_bridge++;
}
else {
low[u] = min(low[u], tin[v]);
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
num_cc = 0;
cnt_bridge = 0;
timer = 0;
for (int u = 1; u <= n; u++) {
if (!tin[u]) {
num_cc++;
dfs(u, -1);
}
}
// Trường hợp đồ thị có từ 3 thành phần liên thông trở lên thì hiển nhiên không tồn tại kế hoạch cải tổ hợp lệ nào cả
// Nên ta sẽ chỉ xét trường hợp đồ thị có 1 hoặc 2 thành phần liên thông
ll ans = 0;
// Trường hợp đồ thị có 1 thành phần liên thông:
if (num_cc == 1) {
ll m1 = nC2(n) - m; // Số cạnh có thể thêm
// Với mỗi cách xoá cạnh không phải là cầu, ta có m1 cách thêm cạnh
ans = 1ll * (m - cnt_bridge) * m1;
// Còn trường hợp cạnh xoá là cạnh cầu thì đồ thị khi đó sẽ bị tách làm 2 thành phần liên thông
// Ta phải thêm cạnh (u, v) sao cho u thuộc thành phần liên thông này còn v thuộc thành phần liên thông kia
// (lưu ý cạnh (u, v) thêm vào phải khác cạnh vừa bị xoá)
for (int v = 2; v <= n; v++) {
if (low[v] == tin[v]) {
ans += 1ll * sz[v] * (n - sz[v]) - 1;
}
}
}
// Trường hợp đồ thị có 2 thành phần liên thông:
// Hiển nhiên ta không được phép xoá cạnh cầu
// Với mỗi cách xoá cạnh không phải là cầu
// thì ta phải thêm cạnh (u, v) sao cho u thuộc thành phần liên thông này còn v thuộc thành phần liên thông kia
if (num_cc == 2) {
ans = 1ll * (m - cnt_bridge) * cnt[1] * (n - cnt[1]);
}
cout << ans << '\n';
}