#include <bits/stdc++.h>
#define int long long
#define ll long long
using namespace std;
const int maxn = 2e5 + 7;
int num[maxn] , low[maxn] , par[maxn] , sz[maxn] , root[maxn] , timedfs = 0 , id;
vector <int> g[maxn] , bridchild;
int n , m;
void dfs(int u)
{
sz[u] = 1;
low[u] = num[u] = ++timedfs;
root[u] = id;
for(int v: g[u])
{
if(v == par[u]) continue;
if(num[v] == 0)
{
par[v] = u;
dfs(v);
sz[u] += sz[v];
if(low[v] > num[u]) bridchild.push_back(v);
low[u] = min(low[u] , low[v]);
}
else low[u] = min(low[u] , num[v]);
}
}
void solve()
{
cin >> n >> m;
for(int i = 1; i <= m; i++)
{
int u , v; cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
int tplt = 0;
vector <int> sztplt;
for(int i = 1; i <= n; i++)
{
if(num[i] == 0)
{
id = i;
tplt++;
dfs(i);
sztplt.push_back(sz[i]);
}
}
if(tplt > 2)
{
cout << 0 << '\n'; return;
}
if(tplt == 2)
{
cout << 1LL*(m - bridchild.size())*(sztplt[0] * sztplt[1]) << '\n';
return;
}
ll ans = 1LL*(m - bridchild.size())*(n*(n-1)/2 - m);
for(int v: bridchild)
{
ans += 1LL*sz[v] * (n - sz[v]) - 1;
}
cout << ans << '\n';
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGxsIGxvbmcgbG9uZwp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IG1heG4gPSAyZTUgKyA3OwoKaW50IG51bVttYXhuXSAsIGxvd1ttYXhuXSAsIHBhclttYXhuXSAsIHN6W21heG5dICwgcm9vdFttYXhuXSAsIHRpbWVkZnMgPSAwICwgaWQ7CnZlY3RvciA8aW50PiBnW21heG5dICwgYnJpZGNoaWxkOwoKaW50IG4gLCBtOwoKdm9pZCBkZnMoaW50IHUpCnsKICAgIHN6W3VdID0gMTsKICAgIGxvd1t1XSA9IG51bVt1XSA9ICsrdGltZWRmczsKICAgIHJvb3RbdV0gPSBpZDsKCiAgICBmb3IoaW50IHY6IGdbdV0pCiAgICB7CiAgICAgICAgaWYodiA9PSBwYXJbdV0pIGNvbnRpbnVlOwoKICAgICAgICBpZihudW1bdl0gPT0gMCkKICAgICAgICB7CiAgICAgICAgICAgIHBhclt2XSA9IHU7CiAgICAgICAgICAgIGRmcyh2KTsKICAgICAgICAgICAgc3pbdV0gKz0gc3pbdl07CgogICAgICAgICAgICBpZihsb3dbdl0gPiBudW1bdV0pIGJyaWRjaGlsZC5wdXNoX2JhY2sodik7CgogICAgICAgICAgICBsb3dbdV0gPSBtaW4obG93W3VdICwgbG93W3ZdKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBsb3dbdV0gPSBtaW4obG93W3VdICwgbnVtW3ZdKTsKICAgIH0KfQoKdm9pZCBzb2x2ZSgpCnsKICAgIGNpbiA+PiBuID4+IG07CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG07IGkrKykKICAgIHsKICAgICAgICBpbnQgdSAsIHY7IGNpbiA+PiB1ID4+IHY7CiAgICAgICAgZ1t1XS5wdXNoX2JhY2sodik7CiAgICAgICAgZ1t2XS5wdXNoX2JhY2sodSk7CiAgICB9CgogICAgaW50IHRwbHQgPSAwOwoKICAgIHZlY3RvciA8aW50PiBzenRwbHQ7CgogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICB7CiAgICAgICAgaWYobnVtW2ldID09IDApCiAgICAgICAgewogICAgICAgICAgICBpZCA9IGk7CiAgICAgICAgICAgIHRwbHQrKzsKICAgICAgICAgICAgZGZzKGkpOwogICAgICAgICAgICBzenRwbHQucHVzaF9iYWNrKHN6W2ldKTsKICAgICAgICB9CiAgICB9CgogICAgaWYodHBsdCA+IDIpCiAgICB7CiAgICAgICAgY291dCA8PCAwIDw8ICdcbic7IHJldHVybjsKICAgIH0KCiAgICBpZih0cGx0ID09IDIpCiAgICB7CiAgICAgICAgY291dCA8PCAxTEwqKG0gLSBicmlkY2hpbGQuc2l6ZSgpKSooc3p0cGx0WzBdICogc3p0cGx0WzFdKSA8PCAnXG4nOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBsbCBhbnMgPSAxTEwqKG0gLSBicmlkY2hpbGQuc2l6ZSgpKSoobioobi0xKS8yIC0gbSk7CgoKICAgIGZvcihpbnQgdjogYnJpZGNoaWxkKQogICAgewogICAgICAgIGFucyArPSAxTEwqc3pbdl0gKiAobiAtIHN6W3ZdKSAtIDE7CiAgICB9CgogICAgY291dCA8PCBhbnMgPDwgJ1xuJzsKCn0KCgpzaWduZWQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBzb2x2ZSgpOwogICAgcmV0dXJuIDA7Cn0K