#include<bits/stdc++.h>
#define ll long long
using namespace std;
vector<ll> par;
ll root(ll u){
if(par[u]==u) return u;
ll rt=root(par[u]);
par[u]=rt;
return rt;
}
void join(ll u,ll v){
ll ru=root(u);
ll rv=root(v);
if(ru==rv) return;
par[ru]=rv;
}
ll ans=0;
vector<vector<ll>> e;
vector<ll> sz;
ll getsz(ll u,ll p){
sz[u]=1;
for(auto v:e[u]){
if(v==p) continue;
sz[u]+=getsz(v,u);
}
return sz[u];
}
void dfs(ll u,ll p,ll r){
ll sum=0;
for(auto v:e[u]){
if(v==p) continue;
ans+=sum*sz[v];
sum+=sz[v];
}
ans+=sum*(sz[r]-sz[u]);
for(auto v:e[u]){
if(v==p) continue;
dfs(v,u,r);
}
}
int main(){
ll n,m,i,j,k,q;
cin>>n>>m;
par.resize(n+1);
e.resize(n+1);
sz.resize(n+1);
for(i=1 ; i<=n ; i++) par[i]=i;
for(i=0 ; i<m ; i++){
cin>>j>>k;
join(j,k);
e[j].push_back(k);
e[k].push_back(j);
}
set<ll> st;
for(i=1 ; i<=n ; i++) st.insert(root(i));
for(auto v:st){
getsz(v,v);
dfs(v,v,v);
}
cout<<ans*2<<"\n";
return 0;
}