#include<bits/stdc++.h>usingnamespacestd;classUnionFind{public:intn;vector<int>parent,sz;public:UnionFind(intn){this->n=n;parent.resize(n);sz.resize(n);for(inti=0;i<n;i++){parent[i]=i;sz[i]=1;}}intfind_set(intu){if(u==parent[u]){returnu;}introot_u=find_set(parent[u]);parent[u]=root_u;returnroot_u;}voidunion_sets(inta,intb){a=find_set(a);b=find_set(b);if(a!=b){parent[a]=b;sz[b]+=sz[a];}}};vector<longlong>solve(intn,vector<pair<int,int>>&edges){intm=edges.size();UnionFinddsu(n);longlongreachable_pairs=0;longlongtotal_pairs=1LL*n*(n-1)/2;vector<longlong>ans;for(inti=m-1;i>=0;i--){intx=edges[i].first;inty=edges[i].second;x--;y--;ans.push_back(total_pairs-reachable_pairs);// Remember that the size should be of leader, not the element.
if(dsu.find_set(x)!=dsu.find_set(y)){reachable_pairs+=(1LL*dsu.sz[dsu.find_set(x)]*dsu.sz[dsu.find_set(y)]);}dsu.union_sets(x,y);}reverse(ans.begin(),ans.end());returnans;}intmain(){intn,m;cin>>n>>m;vector<pair<int,int>>edges(m);for(inti=0;i<m;i++){intx,y;cin>>x>>y;edges[i]=make_pair(x,y);}vector<longlong>res=solve(n,edges);for(inti=0;i<(int)res.size();i++){cout<<res[i]<<"\n";}}