#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+10;
int pa[N];
map<int,int> in[N],out[N];
ll ans=0,sz[N];
int root(int x){if(pa[x]==x) return x; return pa[x]=root(pa[x]);}
ll allp(ll x){return (x*(x-1LL));}
void merge(int u,int v){
int ru=root(u),rv=root(v);
ans-=allp(sz[ru])+allp(sz[rv]);
//cout<<ans <<" ";
int szu=in[u].size()+out[u].size();
int szv=in[v].size()+out[v].size();
if(szu<szv) swap(szu,szv),swap(u,v),swap(ru,rv);
ll un=in[u].size();
//cout<<"root" <<ru <<" " <<rv <<" ";
for(auto [x,st]:in[rv]){
if(root(x)==rv) continue;
if(root(x)==ru){
ans-=sz[rv];
continue;
}
if(in[ru][x]) un--;
if(!in[ru][x]) ans+=sz[ru];
in[ru][x]=1;
}
//cout<<ans <<" ";
ans+=un*sz[rv];
//cout<<ans <<" ";
for(auto [x,st]:out[rv]){
if(root(x)==rv) continue;
if(root(x)==ru){
ans-=sz[ru];
continue;
}
out[ru][x]=1;
}
//cout<<ans <<" ";
sz[ru]+=sz[rv];
ans+=allp(sz[ru]);
pa[rv]=ru;
}
int main(){
int n,m; cin>>n >>m;
for(int i=1;i<=n;i++) pa[i]=i,sz[i]=1;
for(int i=0;i<m;i++){
int u,v; cin>>u >>v;
if(root(u)==root(v)){
cout<<ans <<"\n";
continue;
}
int ru=root(u),rv=root(v);
if(in[rv][ru]){
cout<<ans <<"\n";
continue;
}
if(out[rv][ru]){
merge(u,v);
}
else{
if(out[ru][rv]){
cout<<ans <<"\n";
continue;
}
out[ru][rv]=1;
in[rv][ru]=1;
ans+=sz[rv];
}
cout<<ans <<"\n";
}
}