#include<bits/stdc++.h>
using namespace std;
#define lli long long int
#define li long int
#define scan(x) cin >> x
#define pb push_back
#define mk make_pair
#define scantype int
#define endl "\n"
#define unique(x) x.erase(unique(x.begin(),x.end()), x.end())
#define all(x) x.begin(),x.end()
lli MOD = 1000000007;
lli inf = 1e15;
lli powermod(lli _a,lli _b,lli _m){lli _r=1;while(_b){if(_b%2==1)_r=(_r*_a)%_m;_b/=2;_a=(_a*_a)%_m;}return _r;}
lli string_to_number(string s){lli x=0; stringstream convert(s); convert>>x; return x;}
lli add(lli a,lli b){lli x = (a+b)%MOD; return x; }
lli mul(lli a,lli b){lli x = (a*b)%MOD; return x; }
lli sub(lli a,lli b){lli x = (a-b+MOD)%MOD; return x; }
lli divi(lli a,lli b){lli x = a;lli y = powermod(b,MOD-2,MOD);lli res = (x*y)%MOD;return res;}
#define N 100010
vector<int> adj[N+10],ans;
vector<bool> vis(N+10);
int dfs(int u){
if(!vis[u]){
vis[u]=true;
int temp=0;
for(int i=0;i<adj[u].size();i++)
temp+=dfs(adj[u][i]);
return temp+1;
}
return 0;
}
int main(){
//Code here
int n,m,t1,t2;
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
scanf("%d%d",&t1,&t2);
adj[t1].pb(t2);
adj[t2].pb(t1);
}
for(int i=0;i<n;i++){
if(!vis[i])
ans.pb(dfs(i));
}
lli cnt=0;
for(auto it:ans)
cnt+=it;
lli pnt=0;
for(auto it:ans){
cnt-=it;
pnt+=(lli)it*cnt;
}
cout << pnt;
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBsbGkgbG9uZyBsb25nIGludAojZGVmaW5lIGxpIGxvbmcgaW50IAojZGVmaW5lIHNjYW4oeCkgY2luID4+IHgKCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgbWsgbWFrZV9wYWlyCiNkZWZpbmUgc2NhbnR5cGUgaW50CiNkZWZpbmUgZW5kbCAiXG4iCiNkZWZpbmUgdW5pcXVlKHgpIHguZXJhc2UodW5pcXVlKHguYmVnaW4oKSx4LmVuZCgpKSwgeC5lbmQoKSkKI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLHguZW5kKCkKCmxsaSBNT0QgID0gMTAwMDAwMDAwNzsKbGxpIGluZiA9IDFlMTU7CgpsbGkgcG93ZXJtb2QobGxpIF9hLGxsaSBfYixsbGkgX20pe2xsaSBfcj0xO3doaWxlKF9iKXtpZihfYiUyPT0xKV9yPShfcipfYSklX207X2IvPTI7X2E9KF9hKl9hKSVfbTt9cmV0dXJuIF9yO30KbGxpIHN0cmluZ190b19udW1iZXIoc3RyaW5nIHMpe2xsaSB4PTA7IHN0cmluZ3N0cmVhbSBjb252ZXJ0KHMpOyBjb252ZXJ0Pj54OyByZXR1cm4geDt9CmxsaSBhZGQobGxpIGEsbGxpIGIpe2xsaSB4ID0gKGErYiklTU9EOyByZXR1cm4geDsgfQpsbGkgbXVsKGxsaSBhLGxsaSBiKXtsbGkgeCA9IChhKmIpJU1PRDsgcmV0dXJuIHg7IH0KbGxpIHN1YihsbGkgYSxsbGkgYil7bGxpIHggPSAoYS1iK01PRCklTU9EOyByZXR1cm4geDsgfQpsbGkgZGl2aShsbGkgYSxsbGkgYil7bGxpIHggPSBhO2xsaSB5ID0gcG93ZXJtb2QoYixNT0QtMixNT0QpO2xsaSByZXMgPSAoeCp5KSVNT0Q7cmV0dXJuIHJlczt9CiNkZWZpbmUgTiAxMDAwMTAKCnZlY3RvcjxpbnQ+IGFkaltOKzEwXSxhbnM7CnZlY3Rvcjxib29sPiB2aXMoTisxMCk7CmludCBkZnMoaW50IHUpewoJaWYoIXZpc1t1XSl7CgkJdmlzW3VdPXRydWU7CgkJaW50IHRlbXA9MDsKCQlmb3IoaW50IGk9MDtpPGFkalt1XS5zaXplKCk7aSsrKQoJCQl0ZW1wKz1kZnMoYWRqW3VdW2ldKTsKCQlyZXR1cm4gdGVtcCsxOwoJfQoJcmV0dXJuIDA7Cn0KCgppbnQgbWFpbigpewoJLy9Db2RlIGhlcmUKCWludCBuLG0sdDEsdDI7CglzY2FuZigiJWQlZCIsJm4sJm0pOwoJZm9yKGludCBpPTA7aTxtO2krKyl7CgkJc2NhbmYoIiVkJWQiLCZ0MSwmdDIpOwoJCWFkalt0MV0ucGIodDIpOwoJCWFkalt0Ml0ucGIodDEpOwoJfQoJZm9yKGludCBpPTA7aTxuO2krKyl7CgkJaWYoIXZpc1tpXSkKCQkJYW5zLnBiKGRmcyhpKSk7Cgl9CglsbGkgY250PTA7Cglmb3IoYXV0byBpdDphbnMpCgkJY250Kz1pdDsKCWxsaSBwbnQ9MDsKCWZvcihhdXRvIGl0OmFucyl7CgkJY250LT1pdDsKCQlwbnQrPShsbGkpaXQqY250OwoJfQoJY291dCA8PCBwbnQ7CglyZXR1cm4gMDsKfQ==