#include<bits/stdc++.h>

using namespace std;

struct Edge
{
    int u,v;

    Edge(){}
    Edge(int u,int v):u(u),v(v){}
}e[100010];

int fa[100010],siz[100010];
long long anss[100010];

int find(int x)
{
    return fa[x]?fa[x]=find(fa[x]):x;
}

int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int u,v;
        cin>>u>>v;
        e[i]=Edge(u,v);
    }
    for(int i=1;i<=n;i++)
    {
        siz[i]=1;
    }
    long long ans=0;
    for(int i=1;i<=m;i++)
    {
        int now=m-i+1;
        int fau=find(e[now].u),fav=find(e[now].v);
        if(fau!=fav)
        {
            ans+=1ll*siz[fau]*siz[fav];
            fa[fau]=fav;
            siz[fav]+=siz[fau];
        }
        anss[now]=ans;
    }
    for(int i=2;i<=m;i++)
    {
        cout<<ans-anss[i]<<'\n';
    }
    cout<<1ll*n*(n-1)/2<<'\n';
}