class UnionFind():
    def __init__(self,n):
        self.n=n
        self.parents=[-1]*n
    def find(self,x):
        if self.parents[x] < 0:
            return x
        else:
            self.parents[x]=self.find(self.parents[x])
            return self.parents[x]
    def unite(self,x,y):
        x = self.find(x)
        y = self.find(y)
        if x==y:
            return
        if self.parents[x]>self.parents[y]:
            x,y=y,x
        self.parents[x]+=self.parents[y]
        self.parents[y]=x
    def size(self, x):
        return -self.parents[self.find(x)]
    def same(self, x, y):
        return self.find(x) == self.find(y)
    def members(self, x):
        root = self.find(x)
        return [i for i in range(self.n) if self.find(i)==root]
    def roots(self):
        return [i for i,x in enumerate(self.parents) if x<0]
    def group_count(self):
        return len(self.roots())
    def all_group_members(self):
        return {r: self.members(r) for r in self.roots()}
n,m=map(int,input().split())
ab=[list(map(int,input().split())) for i in range(m)]
uf=UnionFind(n)
ans=[0]*m
ans[-1]=n*(n-1)//2
for i in range(1,m)[::-1]:
  a,b=ab[i][0]-1,ab[i][1]-1
  if uf.same(a,b):
    ans[i-1]=ans[i]
  else:
    ans[i-1]=ans[i]-uf.size(a)*uf.size(b)
    uf.unite(a,b)
print('\n'.join(map(str,ans))) class UnionFind():
    def __init__(self,n):
        self.n=n
        self.parents=[-1]*n
    def find(self,x):
        if self.parents[x] < 0:
            return x
        else:
            self.parents[x]=self.find(self.parents[x])
            return self.parents[x]
    def unite(self,x,y):
        x = self.find(x)
        y = self.find(y)
        if x==y:
            return
        if self.parents[x]>self.parents[y]:
            x,y=y,x
        self.parents[x]+=self.parents[y]
        self.parents[y]=x
    def size(self, x):
        return -self.parents[self.find(x)]
    def same(self, x, y):
        return self.find(x) == self.find(y)
    def members(self, x):
        root = self.find(x)
        return [i for i in range(self.n) if self.find(i)==root]
    def roots(self):
        return [i for i,x in enumerate(self.parents) if x<0]
    def group_count(self):
        return len(self.roots())
    def all_group_members(self):
        return {r: self.members(r) for r in self.roots()} UnionFind def __init__(self,n):
        self.n=n
        self.parents=[-1]*n
     __init__ self.n=n self.n self n n self.parents=[-1]*n self.parents self parents [-1]*n [-1] -1 n self self n n def find(self,x):
        if self.parents[x] < 0:
            return x
        else:
            self.parents[x]=self.find(self.parents[x])
            return self.parents[x]
     find if self.parents[x] < 0:
            return x
        else:
            self.parents[x]=self.find(self.parents[x])
            return self.parents[x]
     self.parents[x] < 0 self.parents[x] self.parents self parents x 0 return x x self.parents[x]=self.find(self.parents[x]) self.parents[x] self.parents self parents x self.find(self.parents[x]) self.find self find self.parents[x] self.parents self parents x return self.parents[x] self.parents[x] self.parents self parents x self self x x def unite(self,x,y):
        x = self.find(x)
        y = self.find(y)
        if x==y:
            return
        if self.parents[x]>self.parents[y]:
            x,y=y,x
        self.parents[x]+=self.parents[y]
        self.parents[y]=x
     unite x = self.find(x) x self.find(x) self.find self find x y = self.find(y) y self.find(y) self.find self find y if x==y:
            return
         x==y x y return if self.parents[x]>self.parents[y]:
            x,y=y,x
         self.parents[x]>self.parents[y] self.parents[x] self.parents self parents x self.parents[y] self.parents self parents y x,y=y,x x y y x self.parents[x]+=self.parents[y] self.parents[x] self.parents self parents x self.parents[y] self.parents self parents y self.parents[y]=x self.parents[y] self.parents self parents y x self self x x y y def size(self, x):
        return -self.parents[self.find(x)]
     size return -self.parents[self.find(x)] -self.parents[self.find(x)] self.parents[self.find(x)] self.parents self parents self.find(x) self.find self find x self self x x def same(self, x, y):
        return self.find(x) == self.find(y)
     same return self.find(x) == self.find(y) self.find(x) == self.find(y) self.find(x) self.find self find x self.find(y) self.find self find y self self x x y y def members(self, x):
        root = self.find(x)
        return [i for i in range(self.n) if self.find(i)==root]
     members root = self.find(x) root self.find(x) self.find self find x i for i in range(self.n) if self.find(i)==root for i in range(self.n) if self.find(i)==root i range(self.n) range self.n self n self.find(i)==root self.find(i) self.find self find i root if self.find(i)==root i return [i for i in range(self.n) if self.find(i)==root] [i for i in range(self.n) if self.find(i)==root] self self x x def roots(self):
        return [i for i,x in enumerate(self.parents) if x<0]
     roots i for i,x in enumerate(self.parents) if x<0 for i,x in enumerate(self.parents) if x<0 i x enumerate(self.parents) enumerate self.parents self parents x<0 x 0 if x<0 i return [i for i,x in enumerate(self.parents) if x<0] [i for i,x in enumerate(self.parents) if x<0] self self def group_count(self):
        return len(self.roots())
     group_count return len(self.roots()) len(self.roots()) len self.roots() self.roots self roots self self def all_group_members(self):
        return {r: self.members(r) for r in self.roots()} all_group_members r: self.members(r) for r in self.roots() for r in self.roots() r self.roots() self.roots self roots for r in self.roots() r self.members(r) self.members self members r return {r: self.members(r) for r in self.roots()} {r: self.members(r) for r in self.roots()} self self n,m=map(int,input().split()) n map(int,input().split()) map int input().split() ().split () input split m list(map(int,input().split())) for i in range(m) for i in range(m) i range(m) range m for i in range(m) list(map(int,input().split())) list map(int,input().split()) map int input().split() ().split () input split ab=[list(map(int,input().split())) for i in range(m)] ab [list(map(int,input().split())) for i in range(m)] uf=UnionFind(n) uf UnionFind(n) UnionFind n ans=[0]*m ans [0]*m [0] 0 m ans[-1]=n*(n-1)//2 ans[-1] ans -1 n*(n-1)//2 n*(n-1) n n-1 n 1 2 for i in range(1,m)[::-1]:
  a,b=ab[i][0]-1,ab[i][1]-1
  if uf.same(a,b):
    ans[i-1]=ans[i]
  else:
    ans[i-1]=ans[i]-uf.size(a)*uf.size(b)
    uf.unite(a,b) i range(1,m)[::-1] (1,m) range 1 m ::-1 -1 a,b=ab[i][0]-1,ab[i][1]-1 a ab[i][0]-1 ab[i][0] [i] ab i 0 1 b ab[i][1]-1 ab[i][1] [i] ab i 1 1 if uf.same(a,b):
    ans[i-1]=ans[i]
  else:
    ans[i-1]=ans[i]-uf.size(a)*uf.size(b)
    uf.unite(a,b) uf.same(a,b) uf.same uf same a b ans[i-1]=ans[i] ans[i-1] ans i-1 i 1 ans[i] ans i ans[i-1]=ans[i]-uf.size(a)*uf.size(b) ans[i-1] ans i-1 i 1 ans[i]-uf.size(a)*uf.size(b) ans[i] ans i uf.size(a)*uf.size(b) uf.size(a) uf.size uf size a uf.size(b) uf.size uf size b uf.unite(a,b) uf.unite uf unite a b print('\n'.join(map(str,ans))) print '\n'.join(map(str,ans)) '\n'.join '\n' join map(str,ans) map str ans class UnionFind():
    def __init__(self,n):
        self.n=n
        self.parents=[-1]*n
    def find(self,x):
        if self.parents[x] < 0:
            return x
        else:
            self.parents[x]=self.find(self.parents[x])
            return self.parents[x]
    def unite(self,x,y):
        x = self.find(x)
        y = self.find(y)
        if x==y:
            return
        if self.parents[x]>self.parents[y]:
            x,y=y,x
        self.parents[x]+=self.parents[y]
        self.parents[y]=x
    def size(self, x):
        return -self.parents[self.find(x)]
    def same(self, x, y):
        return self.find(x) == self.find(y)
    def members(self, x):
        root = self.find(x)
        return [i for i in range(self.n) if self.find(i)==root]
    def roots(self):
        return [i for i,x in enumerate(self.parents) if x<0]
    def group_count(self):
        return len(self.roots())
    def all_group_members(self):
        return {r: self.members(r) for r in self.roots()} class UnionFind():
    def __init__(self,n):
        self.n=n
        self.parents=[-1]*n
    def find(self,x):
        if self.parents[x] < 0:
            return x
        else:
            self.parents[x]=self.find(self.parents[x])
            return self.parents[x]
    def unite(self,x,y):
        x = self.find(x)
        y = self.find(y)
        if x==y:
            return
        if self.parents[x]>self.parents[y]:
            x,y=y,x
        self.parents[x]+=self.parents[y]
        self.parents[y]=x
    def size(self, x):
        return -self.parents[self.find(x)]
    def same(self, x, y):
        return self.find(x) == self.find(y)
    def members(self, x):
        root = self.find(x)
        return [i for i in range(self.n) if self.find(i)==root]
    def roots(self):
        return [i for i,x in enumerate(self.parents) if x<0]
    def group_count(self):
        return len(self.roots())
    def all_group_members(self):
        return {r: self.members(r) for r in self.roots()} UnionFind uf=UnionFind(n) UnionFind(n) uf m=map(int,input().split()) map(int,input().split()) m a,b=ab[i][0]-1,ab[i][1]-1 ab[i][0]-1 a ab=[list(map(int,input().split())) for i in range(m)] [list(map(int,input().split())) for i in range(m)] ab n,m=map(int,input().split()) map(int,input().split()) n b=ab[i][0]-1,ab[i][1]-1 ab[i][1]-1 b ans=[0]*m [0]*m ans
class UnionFind():
    def __init__(self,n):
        self.n=n
        self.parents=[-1]*n
    def find(self,x):
        if self.parents[x] < 0:
            return x
        else:
            self.parents[x]=self.find(self.parents[x])
            return self.parents[x]
    def unite(self,x,y):
        x = self.find(x)
        y = self.find(y)
        if x==y:
            return
        if self.parents[x]>self.parents[y]:
            x,y=y,x
        self.parents[x]+=self.parents[y]
        self.parents[y]=x
    def size(self, x):
        return -self.parents[self.find(x)]
    def same(self, x, y):
        return self.find(x) == self.find(y)
    def members(self, x):
        root = self.find(x)
        return [i for i in range(self.n) if self.find(i)==root]
    def roots(self):
        return [i for i,x in enumerate(self.parents) if x<0]
    def group_count(self):
        return len(self.roots())
    def all_group_members(self):
        return {r: self.members(r) for r in self.roots()}
n,m=map(int,input().split())
ab=[list(map(int,input().split())) for i in range(m)]
uf=UnionFind(n)
ans=[0]*m
ans[-1]=n*(n-1)//2
for i in range(1,m)[::-1]:
  a,b=ab[i][0]-1,ab[i][1]-1
  if uf.same(a,b):
    ans[i-1]=ans[i]
  else:
    ans[i-1]=ans[i]-uf.size(a)*uf.size(b)
    uf.unite(a,b)
print('\n'.join(map(str,ans)))