//ABC 120 D;
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
const int maxn=100010;
struct EDGE{
	int u,v;
}e[maxn];

ll sz[maxn],p[maxn],ans[maxn];

inline int read(){
	int x=0,f=1;
	char ch=getchar();
	while(!isdigit(ch)){
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(isdigit(ch)){
		x=x*10+ch-'0';
		ch=getchar();
	}
	return x*f;
}

int get_set(int x){
	if(x!=p[x]) p[x]=get_set(p[x]);
	return p[x];
}

int main(){
	//freopen("","r",stdin);
	//freopen("","w",stdout);
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		e[i].u=read();
		e[i].v=read();
	}
	ans[m]=(ll)(n-1)*n/2;
	for(int i=1;i<=n;i++)
		p[i]=i,sz[i]=1;
	for(int i=m;i>=1;i--){
		int u=get_set(e[i].u),v=get_set(e[i].v);
		if(u==v) ans[i-1]=ans[i];
		else{
			ans[i-1]=ans[i]-sz[u]*sz[v];
			p[u]=v;
			sz[v]+=sz[u];
		}
	}
	for(int i=1;i<=m;i++)
		cout<<ans[i]<<endl;
	return 0;
}