class UnionFind():
    def __init__(self,n):
        self.n=n
        self.parent=list(range(n+1))
        self.size=[1]*(n+1)
    def find(self,x):
    #根を探す。
    #別なグループ間をつなげた場合は、つなげた先の根に書き換える。
        if self.parent[x]==x:
            return x
        else:
            self.parent[x]=self.find(self.parent[x])
            return self.parent[x]
    def unite(self,x,y):
    #二つのグループをつなげる
    #大きいほうに小さいほうをつなげる。
        x=self.find(x)
        y=self.find(y)
        if x==y:
            return
        else:
            if self.size[x]>=self.size[y]:
                self.parent[y]=x
                self.size[x]+=self.size[y]
            else:
                self.parent[x]=y
                self.size[y]+=self.size[x]
    def cnt(self,x):
    #サイズの取得
        return self.size[self.find(x)]

def main():
    n,m=map(int,input().split())
    ab=[list(map(int,input().split())) for _ in range(m)][::-1]
    u=UnionFind(n)
    ans=[0]*(m+1)
    ans[0]=n*(n-1)//2
    for i in range(m):
        a,b=ab[i][0],ab[i][1]
        if u.find(a)==u.find(b):
            ans[i+1]=ans[i]
        else:
            ans[i+1]=ans[i]-u.cnt(a)*u.cnt(b)
            u.unite(a,b)
    for i in ans[m-1::-1]:
        print(i)

if __name__ == '__main__':
    main() class UnionFind():
    def __init__(self,n):
        self.n=n
        self.parent=list(range(n+1))
        self.size=[1]*(n+1)
    def find(self,x):
    #根を探す。
    #別なグループ間をつなげた場合は、つなげた先の根に書き換える。
        if self.parent[x]==x:
            return x
        else:
            self.parent[x]=self.find(self.parent[x])
            return self.parent[x]
    def unite(self,x,y):
    #二つのグループをつなげる
    #大きいほうに小さいほうをつなげる。
        x=self.find(x)
        y=self.find(y)
        if x==y:
            return
        else:
            if self.size[x]>=self.size[y]:
                self.parent[y]=x
                self.size[x]+=self.size[y]
            else:
                self.parent[x]=y
                self.size[y]+=self.size[x]
    def cnt(self,x):
    #サイズの取得
        return self.size[self.find(x)] UnionFind def __init__(self,n):
        self.n=n
        self.parent=list(range(n+1))
        self.size=[1]*(n+1)
     __init__ self.n=n self.n self n n self.parent=list(range(n+1)) self.parent self parent list(range(n+1)) list range(n+1) range n+1 n 1 self.size=[1]*(n+1) self.size self size [1]*(n+1) [1] 1 n+1 n 1 self self n n def find(self,x):
    #根を探す。
    #別なグループ間をつなげた場合は、つなげた先の根に書き換える。
        if self.parent[x]==x:
            return x
        else:
            self.parent[x]=self.find(self.parent[x])
            return self.parent[x]
     find if self.parent[x]==x:
            return x
        else:
            self.parent[x]=self.find(self.parent[x])
            return self.parent[x]
     self.parent[x]==x self.parent[x] self.parent self parent x x return x x self.parent[x]=self.find(self.parent[x]) self.parent[x] self.parent self parent x self.find(self.parent[x]) self.find self find self.parent[x] self.parent self parent x return self.parent[x] self.parent[x] self.parent self parent x self self x x def unite(self,x,y):
    #二つのグループをつなげる
    #大きいほうに小さいほうをつなげる。
        x=self.find(x)
        y=self.find(y)
        if x==y:
            return
        else:
            if self.size[x]>=self.size[y]:
                self.parent[y]=x
                self.size[x]+=self.size[y]
            else:
                self.parent[x]=y
                self.size[y]+=self.size[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
        else:
            if self.size[x]>=self.size[y]:
                self.parent[y]=x
                self.size[x]+=self.size[y]
            else:
                self.parent[x]=y
                self.size[y]+=self.size[x]
     x==y x y return if self.size[x]>=self.size[y]:
                self.parent[y]=x
                self.size[x]+=self.size[y]
            else:
                self.parent[x]=y
                self.size[y]+=self.size[x]
     self.size[x]>=self.size[y] self.size[x] self.size self size x self.size[y] self.size self size y self.parent[y]=x self.parent[y] self.parent self parent y x self.size[x]+=self.size[y] self.size[x] self.size self size x self.size[y] self.size self size y self.parent[x]=y self.parent[x] self.parent self parent x y self.size[y]+=self.size[x] self.size[y] self.size self size y self.size[x] self.size self size x self self x x y y def cnt(self,x):
    #サイズの取得
        return self.size[self.find(x)] cnt return self.size[self.find(x)] self.size[self.find(x)] self.size self size self.find(x) self.find self find x self self x x def main():
    n,m=map(int,input().split())
    ab=[list(map(int,input().split())) for _ in range(m)][::-1]
    u=UnionFind(n)
    ans=[0]*(m+1)
    ans[0]=n*(n-1)//2
    for i in range(m):
        a,b=ab[i][0],ab[i][1]
        if u.find(a)==u.find(b):
            ans[i+1]=ans[i]
        else:
            ans[i+1]=ans[i]-u.cnt(a)*u.cnt(b)
            u.unite(a,b)
    for i in ans[m-1::-1]:
        print(i) main 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 _ in range(m) for _ in range(m) _ range(m) range m for _ 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 _ in range(m)][::-1] ab [list(map(int,input().split())) for _ in range(m)][::-1] [list(map(int,input().split())) for _ in range(m)] ::-1 -1 u=UnionFind(n) u UnionFind(n) UnionFind n ans=[0]*(m+1) ans [0]*(m+1) [0] 0 m+1 m 1 ans[0]=n*(n-1)//2 ans[0] ans 0 n*(n-1)//2 n*(n-1) n n-1 n 1 2 for i in range(m):
        a,b=ab[i][0],ab[i][1]
        if u.find(a)==u.find(b):
            ans[i+1]=ans[i]
        else:
            ans[i+1]=ans[i]-u.cnt(a)*u.cnt(b)
            u.unite(a,b)
     i range(m) range m a,b=ab[i][0],ab[i][1] a ab[i][0] [i] ab i 0 b ab[i][1] [i] ab i 1 if u.find(a)==u.find(b):
            ans[i+1]=ans[i]
        else:
            ans[i+1]=ans[i]-u.cnt(a)*u.cnt(b)
            u.unite(a,b)
     u.find(a)==u.find(b) u.find(a) u.find u find a u.find(b) u.find u find b ans[i+1]=ans[i] ans[i+1] ans i+1 i 1 ans[i] ans i ans[i+1]=ans[i]-u.cnt(a)*u.cnt(b) ans[i+1] ans i+1 i 1 ans[i]-u.cnt(a)*u.cnt(b) ans[i] ans i u.cnt(a)*u.cnt(b) u.cnt(a) u.cnt u cnt a u.cnt(b) u.cnt u cnt b u.unite(a,b) u.unite u unite a b for i in ans[m-1::-1]:
        print(i) i ans[m-1::-1] ans m-1::-1 m-1 m 1 -1 print(i) print i if __name__ == '__main__':
    main() __name__ == '__main__' __name__ '__main__' main() main class UnionFind():
    def __init__(self,n):
        self.n=n
        self.parent=list(range(n+1))
        self.size=[1]*(n+1)
    def find(self,x):
    #根を探す。
    #別なグループ間をつなげた場合は、つなげた先の根に書き換える。
        if self.parent[x]==x:
            return x
        else:
            self.parent[x]=self.find(self.parent[x])
            return self.parent[x]
    def unite(self,x,y):
    #二つのグループをつなげる
    #大きいほうに小さいほうをつなげる。
        x=self.find(x)
        y=self.find(y)
        if x==y:
            return
        else:
            if self.size[x]>=self.size[y]:
                self.parent[y]=x
                self.size[x]+=self.size[y]
            else:
                self.parent[x]=y
                self.size[y]+=self.size[x]
    def cnt(self,x):
    #サイズの取得
        return self.size[self.find(x)] class UnionFind():
    def __init__(self,n):
        self.n=n
        self.parent=list(range(n+1))
        self.size=[1]*(n+1)
    def find(self,x):
    #根を探す。
    #別なグループ間をつなげた場合は、つなげた先の根に書き換える。
        if self.parent[x]==x:
            return x
        else:
            self.parent[x]=self.find(self.parent[x])
            return self.parent[x]
    def unite(self,x,y):
    #二つのグループをつなげる
    #大きいほうに小さいほうをつなげる。
        x=self.find(x)
        y=self.find(y)
        if x==y:
            return
        else:
            if self.size[x]>=self.size[y]:
                self.parent[y]=x
                self.size[x]+=self.size[y]
            else:
                self.parent[x]=y
                self.size[y]+=self.size[x]
    def cnt(self,x):
    #サイズの取得
        return self.size[self.find(x)] UnionFind def main():
    n,m=map(int,input().split())
    ab=[list(map(int,input().split())) for _ in range(m)][::-1]
    u=UnionFind(n)
    ans=[0]*(m+1)
    ans[0]=n*(n-1)//2
    for i in range(m):
        a,b=ab[i][0],ab[i][1]
        if u.find(a)==u.find(b):
            ans[i+1]=ans[i]
        else:
            ans[i+1]=ans[i]-u.cnt(a)*u.cnt(b)
            u.unite(a,b)
    for i in ans[m-1::-1]:
        print(i) def main():
    n,m=map(int,input().split())
    ab=[list(map(int,input().split())) for _ in range(m)][::-1]
    u=UnionFind(n)
    ans=[0]*(m+1)
    ans[0]=n*(n-1)//2
    for i in range(m):
        a,b=ab[i][0],ab[i][1]
        if u.find(a)==u.find(b):
            ans[i+1]=ans[i]
        else:
            ans[i+1]=ans[i]-u.cnt(a)*u.cnt(b)
            u.unite(a,b)
    for i in ans[m-1::-1]:
        print(i) main
class UnionFind():
    def __init__(self,n):
        self.n=n
        self.parent=list(range(n+1))
        self.size=[1]*(n+1)
    def find(self,x):
    #根を探す。
    #別なグループ間をつなげた場合は、つなげた先の根に書き換える。
        if self.parent[x]==x:
            return x
        else:
            self.parent[x]=self.find(self.parent[x])
            return self.parent[x]
    def unite(self,x,y):
    #二つのグループをつなげる
    #大きいほうに小さいほうをつなげる。
        x=self.find(x)
        y=self.find(y)
        if x==y:
            return
        else:
            if self.size[x]>=self.size[y]:
                self.parent[y]=x
                self.size[x]+=self.size[y]
            else:
                self.parent[x]=y
                self.size[y]+=self.size[x]
    def cnt(self,x):
    #サイズの取得
        return self.size[self.find(x)]

def main():
    n,m=map(int,input().split())
    ab=[list(map(int,input().split())) for _ in range(m)][::-1]
    u=UnionFind(n)
    ans=[0]*(m+1)
    ans[0]=n*(n-1)//2
    for i in range(m):
        a,b=ab[i][0],ab[i][1]
        if u.find(a)==u.find(b):
            ans[i+1]=ans[i]
        else:
            ans[i+1]=ans[i]-u.cnt(a)*u.cnt(b)
            u.unite(a,b)
    for i in ans[m-1::-1]:
        print(i)

if __name__ == '__main__':
    main()