'use strict'
function Main(input){
  input=input.trim();
  input=input.split(/\s+/);
  input=input.map(x=>x-0);
  var N=input[0];
  var M=input[1];
  var A=[];
  var B=[];
  for(let i=M;i>0;i--){
    B[i]=input.pop();
    A[i]=input.pop();
  }
  var islands=[];
  for(let i=1;i<=N;i++){
    islands[i]=new Node(null,null,null,1);
  }
  var result=[];
  for(let i=M;i>0;i--){
    let a=islands[A[i]];
    let b=islands[B[i]];
    result[i]=merge(a,b);
  }
  result[M+1]=N*(N-1)/2;
  for(let i=M;i>0;i--){
    result[i]=result[i+1]-result[i];
  }
  result.splice(0,2);
  result=result.join('\n').trim();
  console.log(result);
}

function Node(p,l,r,w){
  var t=this;
  t.parent=p;
  t.left=l;
  t.right=r;
  t.weight=w;
}

Node.prototype.root=function(){
  var t=this;
  var p=t.parent;
  if(p)return p.root();
  else return t;
}

Node.prototype.appendChild=function(c){
  var t=this;
  var l=t.left;
  var r=t.righr;
  var cw=c.weight;
  t.weight+=cw;
  if(!l){
    t.left=c;
    c.parent=t;
    return;
  }
  if(!r){
    t.right=c;
    c.parent=t;
    return;
  }
  var lw=l.weight;
  var rw=r.weight;
  if(lw<=rw)
    l.appendChild(c);
  else
    r.appendChild(c);
}

function merge(node0,node1){
  var t0=node0.root();
  var t1=node1.root();
  if(t0===t1)return 0;
  var w0=t0.weight;
  var w1=t1.weight;
  if(w0>=w1)
    t0.appendChild(t1);
  else
    t1.appendChild(t0);
  return w0*w1;
}

Main(require('fs').readFileSync('/dev/stdin','utf8'));