import sys
input=sys.stdin.readline
n,m=map(int,input().split())
ab=[]
for _ in range(m):
	a,b=map(int,input().split())
	ab.append((a-1,b-1))
ab.reverse()
def same(x,y):
	return root(x)==root(y)
def unite(x,y):
	rx=root(x)
	ry=root(y)
	if rank[rx]<rank[ry]:
		if not same(rx,ry):
			size[ry]+=size[rx]
		parent[rx]=ry
	else:
		if not same(rx,ry):
			size[rx]+=size[ry]
		parent[ry]=rx
		if rank[rx]==rank[ry]:
			rank[rx]+=1
def root(x):
	if x!=parent[x]:
		x=root(parent[x])
	return x
rank=[0]*n
size=[1]*n
parent=list(range(n))
p=n*(n-1)//2
ans=[p]
for a,b in ab:
	if not same(a,b):
		ra=root(a)
		rb=root(b)
		p+=size[ra]*(size[ra]-1)//2
		p+=size[rb]*(size[rb]-1)//2
		unite(a,b)
		ra=root(a)
		e=size[ra]
		p-=e*(e-1)//2
	ans.append(p)
ans.reverse()
for i in range(m):
	print(ans[i+1]) import sys sys input=sys.stdin.readline input sys.stdin.readline sys.stdin sys stdin readline n,m=map(int,input().split()) n map(int,input().split()) map int input().split() ().split () input split m ab=[] ab [] for _ in range(m):
	a,b=map(int,input().split())
	ab.append((a-1,b-1)) _ range(m) range m a,b=map(int,input().split()) a map(int,input().split()) map int input().split() ().split () input split b ab.append((a-1,b-1)) ab.append ab append (a-1,b-1) a-1 a 1 b-1 b 1 ab.reverse() ab.reverse ab reverse def same(x,y):
	return root(x)==root(y) same return root(x)==root(y) root(x)==root(y) root(x) root x root(y) root y x x y y def unite(x,y):
	rx=root(x)
	ry=root(y)
	if rank[rx]<rank[ry]:
		if not same(rx,ry):
			size[ry]+=size[rx]
		parent[rx]=ry
	else:
		if not same(rx,ry):
			size[rx]+=size[ry]
		parent[ry]=rx
		if rank[rx]==rank[ry]:
			rank[rx]+=1 unite rx=root(x) rx root(x) root x ry=root(y) ry root(y) root y if rank[rx]<rank[ry]:
		if not same(rx,ry):
			size[ry]+=size[rx]
		parent[rx]=ry
	else:
		if not same(rx,ry):
			size[rx]+=size[ry]
		parent[ry]=rx
		if rank[rx]==rank[ry]:
			rank[rx]+=1 rank[rx]<rank[ry] rank[rx] rank rx rank[ry] rank ry if not same(rx,ry):
			size[ry]+=size[rx]
		 not same(rx,ry) same(rx,ry) same rx ry size[ry]+=size[rx] size[ry] size ry size[rx] size rx parent[rx]=ry parent[rx] parent rx ry if not same(rx,ry):
			size[rx]+=size[ry]
		 not same(rx,ry) same(rx,ry) same rx ry size[rx]+=size[ry] size[rx] size rx size[ry] size ry parent[ry]=rx parent[ry] parent ry rx if rank[rx]==rank[ry]:
			rank[rx]+=1 rank[rx]==rank[ry] rank[rx] rank rx rank[ry] rank ry rank[rx]+=1 rank[rx] rank rx 1 x x y y def root(x):
	if x!=parent[x]:
		x=root(parent[x])
	return x root if x!=parent[x]:
		x=root(parent[x])
	 x!=parent[x] x parent[x] parent x x=root(parent[x]) x root(parent[x]) root parent[x] parent x return x x x x rank=[0]*n rank [0]*n [0] 0 n size=[1]*n size [1]*n [1] 1 n parent=list(range(n)) parent list(range(n)) list range(n) range n p=n*(n-1)//2 p n*(n-1)//2 n*(n-1) n n-1 n 1 2 ans=[p] ans [p] p for a,b in ab:
	if not same(a,b):
		ra=root(a)
		rb=root(b)
		p+=size[ra]*(size[ra]-1)//2
		p+=size[rb]*(size[rb]-1)//2
		unite(a,b)
		ra=root(a)
		e=size[ra]
		p-=e*(e-1)//2
	ans.append(p) a b ab if not same(a,b):
		ra=root(a)
		rb=root(b)
		p+=size[ra]*(size[ra]-1)//2
		p+=size[rb]*(size[rb]-1)//2
		unite(a,b)
		ra=root(a)
		e=size[ra]
		p-=e*(e-1)//2
	 not same(a,b) same(a,b) same a b ra=root(a) ra root(a) root a rb=root(b) rb root(b) root b p+=size[ra]*(size[ra]-1)//2 p size[ra]*(size[ra]-1)//2 size[ra]*(size[ra]-1) size[ra] size ra size[ra]-1 size[ra] size ra 1 2 p+=size[rb]*(size[rb]-1)//2 p size[rb]*(size[rb]-1)//2 size[rb]*(size[rb]-1) size[rb] size rb size[rb]-1 size[rb] size rb 1 2 unite(a,b) unite a b ra=root(a) ra root(a) root a e=size[ra] e size[ra] size ra p-=e*(e-1)//2 p e*(e-1)//2 e*(e-1) e e-1 e 1 2 ans.append(p) ans.append ans append p ans.reverse() ans.reverse ans reverse for i in range(m):
	print(ans[i+1]) i range(m) range m print(ans[i+1]) print ans[i+1] ans i+1 i 1 b=map(int,input().split()) map(int,input().split()) b ra=root(a) root(a) ra a,b=map(int,input().split()) map(int,input().split()) a p-=e*(e-1)//2 e*(e-1)//2 p ab=[] [] ab rb=root(b) root(b) rb def unite(x,y):
	rx=root(x)
	ry=root(y)
	if rank[rx]<rank[ry]:
		if not same(rx,ry):
			size[ry]+=size[rx]
		parent[rx]=ry
	else:
		if not same(rx,ry):
			size[rx]+=size[ry]
		parent[ry]=rx
		if rank[rx]==rank[ry]:
			rank[rx]+=1 def unite(x,y):
	rx=root(x)
	ry=root(y)
	if rank[rx]<rank[ry]:
		if not same(rx,ry):
			size[ry]+=size[rx]
		parent[rx]=ry
	else:
		if not same(rx,ry):
			size[rx]+=size[ry]
		parent[ry]=rx
		if rank[rx]==rank[ry]:
			rank[rx]+=1 unite p+=size[rb]*(size[rb]-1)//2 size[rb]*(size[rb]-1)//2 p ra=root(a) root(a) ra p+=size[ra]*(size[ra]-1)//2 size[ra]*(size[ra]-1)//2 p def root(x):
	if x!=parent[x]:
		x=root(parent[x])
	return x def root(x):
	if x!=parent[x]:
		x=root(parent[x])
	return x root parent=list(range(n)) list(range(n)) parent m=map(int,input().split()) map(int,input().split()) m input=sys.stdin.readline sys.stdin.readline input e=size[ra] size[ra] e def same(x,y):
	return root(x)==root(y) def same(x,y):
	return root(x)==root(y) same ans=[p] [p] ans rank=[0]*n [0]*n rank size=[1]*n [1]*n size n,m=map(int,input().split()) map(int,input().split()) n p=n*(n-1)//2 n*(n-1)//2 p
import sys
input=sys.stdin.readline
n,m=map(int,input().split())
ab=[]
for _ in range(m):
	a,b=map(int,input().split())
	ab.append((a-1,b-1))
ab.reverse()
def same(x,y):
	return root(x)==root(y)
def unite(x,y):
	rx=root(x)
	ry=root(y)
	if rank[rx]<rank[ry]:
		if not same(rx,ry):
			size[ry]+=size[rx]
		parent[rx]=ry
	else:
		if not same(rx,ry):
			size[rx]+=size[ry]
		parent[ry]=rx
		if rank[rx]==rank[ry]:
			rank[rx]+=1
def root(x):
	if x!=parent[x]:
		x=root(parent[x])
	return x
rank=[0]*n
size=[1]*n
parent=list(range(n))
p=n*(n-1)//2
ans=[p]
for a,b in ab:
	if not same(a,b):
		ra=root(a)
		rb=root(b)
		p+=size[ra]*(size[ra]-1)//2
		p+=size[rb]*(size[rb]-1)//2
		unite(a,b)
		ra=root(a)
		e=size[ra]
		p-=e*(e-1)//2
	ans.append(p)
ans.reverse()
for i in range(m):
	print(ans[i+1])