import sys

read = sys.stdin.read
readline = sys.stdin.readline
readlines = sys.stdin.readlines
sys.setrecursionlimit(10 ** 9)
INF = 1 << 60


class UnionFind:
    # Reference: https://note.nkmk.me/python-union-find/
    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 union(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 same(self, x, y):
        return self.find(x) == self.find(y)


N, M, *AB = map(int, read().split())
uf = UnionFind(N)
ans = [N * (N - 1) // 2]

for a, b in zip(AB[-2:0:-2], AB[-1:1:-2]):
    a -= 1
    b -= 1
    if uf.same(a, b):
        ans.append(ans[-1])
    else:
        ans.append(ans[-1] - uf.parents[uf.find(a)] * uf.parents[uf.find(b)])
        uf.union(a, b)

print(*reversed(ans), sep='\n') import sys sys read = sys.stdin.read read sys.stdin.read sys.stdin sys stdin read readline = sys.stdin.readline readline sys.stdin.readline sys.stdin sys stdin readline readlines = sys.stdin.readlines readlines sys.stdin.readlines sys.stdin sys stdin readlines sys.setrecursionlimit(10 ** 9) sys.setrecursionlimit sys setrecursionlimit 10 ** 9 10 9 INF = 1 << 60 INF 1 << 60 1 60 class UnionFind:
    # Reference: https://note.nkmk.me/python-union-find/
    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 union(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 same(self, x, y):
        return self.find(x) == self.find(y) 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 union(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

     union 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 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 N, M, *AB = map(int, read().split()) N map(int, read().split()) map int read().split() ().split () read split M *AB AB uf = UnionFind(N) uf UnionFind(N) UnionFind N ans = [N * (N - 1) // 2] ans [N * (N - 1) // 2] N * (N - 1) // 2 N * (N - 1) N N - 1 N 1 2 for a, b in zip(AB[-2:0:-2], AB[-1:1:-2]):
    a -= 1
    b -= 1
    if uf.same(a, b):
        ans.append(ans[-1])
    else:
        ans.append(ans[-1] - uf.parents[uf.find(a)] * uf.parents[uf.find(b)])
        uf.union(a, b) a b zip(AB[-2:0:-2], AB[-1:1:-2]) zip AB[-2:0:-2] AB -2:0:-2 -2 0 -2 AB[-1:1:-2] AB -1:1:-2 -1 1 -2 a -= 1 a 1 b -= 1 b 1 if uf.same(a, b):
        ans.append(ans[-1])
    else:
        ans.append(ans[-1] - uf.parents[uf.find(a)] * uf.parents[uf.find(b)])
        uf.union(a, b) uf.same(a, b) uf.same uf same a b ans.append(ans[-1]) ans.append ans append ans[-1] ans -1 ans.append(ans[-1] - uf.parents[uf.find(a)] * uf.parents[uf.find(b)]) ans.append ans append ans[-1] - uf.parents[uf.find(a)] * uf.parents[uf.find(b)] ans[-1] ans -1 uf.parents[uf.find(a)] * uf.parents[uf.find(b)] uf.parents[uf.find(a)] uf.parents uf parents uf.find(a) uf.find uf find a uf.parents[uf.find(b)] uf.parents uf parents uf.find(b) uf.find uf find b uf.union(a, b) uf.union uf union a b print(*reversed(ans), sep='\n') print *reversed(ans) reversed(ans) reversed ans sep='\n' sep '\n' readline = sys.stdin.readline sys.stdin.readline readline class UnionFind:
    # Reference: https://note.nkmk.me/python-union-find/
    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 union(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 same(self, x, y):
        return self.find(x) == self.find(y) class UnionFind:
    # Reference: https://note.nkmk.me/python-union-find/
    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 union(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 same(self, x, y):
        return self.find(x) == self.find(y) UnionFind ans = [N * (N - 1) // 2] [N * (N - 1) // 2] ans a -= 1 1 a INF = 1 << 60 1 << 60 INF M, *AB = map(int, read().split()) map(int, read().split()) M b -= 1 1 b N, M, *AB = map(int, read().split()) map(int, read().split()) N uf = UnionFind(N) UnionFind(N) uf readlines = sys.stdin.readlines sys.stdin.readlines readlines read = sys.stdin.read sys.stdin.read read
import sys

read = sys.stdin.read
readline = sys.stdin.readline
readlines = sys.stdin.readlines
sys.setrecursionlimit(10 ** 9)
INF = 1 << 60


class UnionFind:
    # Reference: https://note.nkmk.me/python-union-find/
    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 union(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 same(self, x, y):
        return self.find(x) == self.find(y)


N, M, *AB = map(int, read().split())
uf = UnionFind(N)
ans = [N * (N - 1) // 2]

for a, b in zip(AB[-2:0:-2], AB[-1:1:-2]):
    a -= 1
    b -= 1
    if uf.same(a, b):
        ans.append(ans[-1])
    else:
        ans.append(ans[-1] - uf.parents[uf.find(a)] * uf.parents[uf.find(b)])
        uf.union(a, b)

print(*reversed(ans), sep='\n')
