#include<iostream>
#include<fstream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<climits>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<set>
#include<list>
using namespace std;
#define lli long long int
#define mod 1000000007
#define p push
#define pb push_back
#define mp make_pair
vector<lli> g[100007];
bool visited[100007];
vector<lli> a;
lli dfs(int index)
{
if(visited[index])
return 0;
visited[index]=1;
vector<lli>::iterator it;
lli ans=1;
for(it=g[index].begin(); it!=g[index].end(); it++)
ans+=dfs(*it);
return ans;
}
int main()
{
lli n, k, i, u, v;
lli num, ans;
vector<lli>::iterator it;
cin >> n >> k;
ans=n*(n-1)/2;
while(k--)
{
cin >> u >> v;
g[u].pb(v);
g[v].pb(u);
}
for(i=1; i<=n; i++)
if(!visited[i])
{
num=dfs(i);
a.pb(num);
}
for(it=a.begin(); it!=a.end(); it++)
{
num=*it;
num=num*(num-1);
num/=2;
ans-=num;
}
cout << ans << endl;
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGZzdHJlYW0+CiNpbmNsdWRlPGNzdGRpbz4KI2luY2x1ZGU8Y3N0cmluZz4KI2luY2x1ZGU8Y21hdGg+CiNpbmNsdWRlPGNsaW1pdHM+CiNpbmNsdWRlPGFsZ29yaXRobT4KI2luY2x1ZGU8dmVjdG9yPgojaW5jbHVkZTxtYXA+CiNpbmNsdWRlPHF1ZXVlPgojaW5jbHVkZTxzdGFjaz4KI2luY2x1ZGU8c2V0PgojaW5jbHVkZTxsaXN0PgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgbGxpIGxvbmcgbG9uZyBpbnQKI2RlZmluZSBtb2QgMTAwMDAwMDAwNwojZGVmaW5lIHAgcHVzaAojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIG1wIG1ha2VfcGFpcgoKdmVjdG9yPGxsaT4gZ1sxMDAwMDddOwpib29sIHZpc2l0ZWRbMTAwMDA3XTsKdmVjdG9yPGxsaT4gYTsKCmxsaSBkZnMoaW50IGluZGV4KQp7CglpZih2aXNpdGVkW2luZGV4XSkKCQlyZXR1cm4gMDsKCgl2aXNpdGVkW2luZGV4XT0xOwoKCXZlY3RvcjxsbGk+OjppdGVyYXRvciBpdDsKCWxsaSBhbnM9MTsKCglmb3IoaXQ9Z1tpbmRleF0uYmVnaW4oKTsgaXQhPWdbaW5kZXhdLmVuZCgpOyBpdCsrKQoJCWFucys9ZGZzKCppdCk7CgoJcmV0dXJuIGFuczsKfQoKaW50IG1haW4oKQoJewoJCWxsaSBuLCBrLCBpLCB1LCB2OwoJCWxsaSBudW0sIGFuczsKCQl2ZWN0b3I8bGxpPjo6aXRlcmF0b3IgaXQ7CgoJCWNpbiA+PiBuID4+IGs7CgoJCWFucz1uKihuLTEpLzI7CgoJCXdoaWxlKGstLSkKCQkJewoJCQkJY2luID4+IHUgPj4gdjsKCQkJCWdbdV0ucGIodik7CgkJCQlnW3ZdLnBiKHUpOwoJCQl9CgoJCWZvcihpPTE7IGk8PW47IGkrKykKCQkJaWYoIXZpc2l0ZWRbaV0pCgkJCQl7CgkJCQkJbnVtPWRmcyhpKTsKCQkJCQlhLnBiKG51bSk7CgkJCQl9CgoJCWZvcihpdD1hLmJlZ2luKCk7IGl0IT1hLmVuZCgpOyBpdCsrKQoJCQl7CgkJCQludW09Kml0OwoJCQkJbnVtPW51bSoobnVtLTEpOwoJCQkJbnVtLz0yOwoJCQkJYW5zLT1udW07CgkJCX0KCgkJY291dCA8PCBhbnMgPDwgZW5kbDsKCQlyZXR1cm4gMDsKCX0=