n,m=map(int,input().split())

par=[i for i in range(n)]
size=[1]*n

def find(x):
  if par[x]==x:
    return x
  else:
    par[x]=find(par[x])
    return par[x]
def union(a,b):
  x=find(a)
  y=find(b)
  if x!=y:
    if size[x]<size[y]:
      par[x]=par[y]
      size[y]+=size[x]
    else: 
      par[y]=par[x]
      size[x]+=size[y]
  else:
    return

ans=[n*(n-1)//2]
bridge=[]

for i in range(m):
  a,b=map(int,input().split())
  a-=1
  b-=1
  bridge.append([a,b])

bridge.reverse()
bridge.pop()

for i in bridge:
  if find(i[0]) != find(i[1]):
    ans.append(ans[-1]-size[find(i[0])]*size[find(i[1])])
    union(i[0],i[1])
  else:
    ans.append(ans[-1])


ans.reverse()

for i in ans:
  print(i) n,m=map(int,input().split()) n map(int,input().split()) map int input().split() ().split () input split m i for i in range(n) for i in range(n) i range(n) range n for i in range(n) i par=[i for i in range(n)] par [i for i in range(n)] size=[1]*n size [1]*n [1] 1 n def find(x):
  if par[x]==x:
    return x
  else:
    par[x]=find(par[x])
    return par[x] find if par[x]==x:
    return x
  else:
    par[x]=find(par[x])
    return par[x] par[x]==x par[x] par x x return x x par[x]=find(par[x]) par[x] par x find(par[x]) find par[x] par x return par[x] par[x] par x x x def union(a,b):
  x=find(a)
  y=find(b)
  if x!=y:
    if size[x]<size[y]:
      par[x]=par[y]
      size[y]+=size[x]
    else: 
      par[y]=par[x]
      size[x]+=size[y]
  else:
    return union x=find(a) x find(a) find a y=find(b) y find(b) find b if x!=y:
    if size[x]<size[y]:
      par[x]=par[y]
      size[y]+=size[x]
    else: 
      par[y]=par[x]
      size[x]+=size[y]
  else:
    return x!=y x y if size[x]<size[y]:
      par[x]=par[y]
      size[y]+=size[x]
    else: 
      par[y]=par[x]
      size[x]+=size[y]
   size[x]<size[y] size[x] size x size[y] size y par[x]=par[y] par[x] par x par[y] par y size[y]+=size[x] size[y] size y size[x] size x par[y]=par[x] par[y] par y par[x] par x size[x]+=size[y] size[x] size x size[y] size y return a a b b ans=[n*(n-1)//2] ans [n*(n-1)//2] n*(n-1)//2 n*(n-1) n n-1 n 1 2 bridge=[] bridge [] for i in range(m):
  a,b=map(int,input().split())
  a-=1
  b-=1
  bridge.append([a,b]) i range(m) range m a,b=map(int,input().split()) a map(int,input().split()) map int input().split() ().split () input split b a-=1 a 1 b-=1 b 1 bridge.append([a,b]) bridge.append bridge append [a,b] a b bridge.reverse() bridge.reverse bridge reverse bridge.pop() bridge.pop bridge pop for i in bridge:
  if find(i[0]) != find(i[1]):
    ans.append(ans[-1]-size[find(i[0])]*size[find(i[1])])
    union(i[0],i[1])
  else:
    ans.append(ans[-1]) i bridge if find(i[0]) != find(i[1]):
    ans.append(ans[-1]-size[find(i[0])]*size[find(i[1])])
    union(i[0],i[1])
  else:
    ans.append(ans[-1]) find(i[0]) != find(i[1]) find(i[0]) find i[0] i 0 find(i[1]) find i[1] i 1 ans.append(ans[-1]-size[find(i[0])]*size[find(i[1])]) ans.append ans append ans[-1]-size[find(i[0])]*size[find(i[1])] ans[-1] ans -1 size[find(i[0])]*size[find(i[1])] size[find(i[0])] size find(i[0]) find i[0] i 0 size[find(i[1])] size find(i[1]) find i[1] i 1 union(i[0],i[1]) union i[0] i 0 i[1] i 1 ans.append(ans[-1]) ans.append ans append ans[-1] ans -1 ans.reverse() ans.reverse ans reverse for i in ans:
  print(i) i ans print(i) print i m=map(int,input().split()) map(int,input().split()) m par=[i for i in range(n)] [i for i in range(n)] par a,b=map(int,input().split()) map(int,input().split()) a bridge=[] [] bridge b-=1 1 b a-=1 1 a n,m=map(int,input().split()) map(int,input().split()) n size=[1]*n [1]*n size def find(x):
  if par[x]==x:
    return x
  else:
    par[x]=find(par[x])
    return par[x] def find(x):
  if par[x]==x:
    return x
  else:
    par[x]=find(par[x])
    return par[x] find def union(a,b):
  x=find(a)
  y=find(b)
  if x!=y:
    if size[x]<size[y]:
      par[x]=par[y]
      size[y]+=size[x]
    else: 
      par[y]=par[x]
      size[x]+=size[y]
  else:
    return def union(a,b):
  x=find(a)
  y=find(b)
  if x!=y:
    if size[x]<size[y]:
      par[x]=par[y]
      size[y]+=size[x]
    else: 
      par[y]=par[x]
      size[x]+=size[y]
  else:
    return union b=map(int,input().split()) map(int,input().split()) b ans=[n*(n-1)//2] [n*(n-1)//2] ans
n,m=map(int,input().split())

par=[i for i in range(n)]
size=[1]*n

def find(x):
  if par[x]==x:
    return x
  else:
    par[x]=find(par[x])
    return par[x]
def union(a,b):
  x=find(a)
  y=find(b)
  if x!=y:
    if size[x]<size[y]:
      par[x]=par[y]
      size[y]+=size[x]
    else: 
      par[y]=par[x]
      size[x]+=size[y]
  else:
    return

ans=[n*(n-1)//2]
bridge=[]

for i in range(m):
  a,b=map(int,input().split())
  a-=1
  b-=1
  bridge.append([a,b])

bridge.reverse()
bridge.pop()

for i in bridge:
  if find(i[0]) != find(i[1]):
    ans.append(ans[-1]-size[find(i[0])]*size[find(i[1])])
    union(i[0],i[1])
  else:
    ans.append(ans[-1])


ans.reverse()

for i in ans:
  print(i)