n, m = map(int, input().split()) *p, = range(n) size = [1]*n def root(x): if x == p[x]: return x p[x] = y = root(p[x]) return y def unite(x, y): px = root(x); py = root(y) if px == py: return 0 sx = size[px]; sy = size[py] if sy < sx: p[py] = px size[px] += sy else: p[px] = py size[py] += sx return 1 UV = [tuple(map(int, input().split())) for _ in range(m)] q = int(input()) B = [int(input())-1 for _ in range(q)] Ans = [] B = B[::-1] ans = n * (n-1) // 2 C = set(B) L = [1 for _ in range(n)] for i in range(m): if i in C: continue u, v = UV[i] u, v = u-1, v-1 lu = root(u) lv = root(v) if lu == lv: continue c0 = L[lu] c1 = L[lv] unite(u, v) ln = root(u) ans -= c0 * c1 L[ln] = c0 + c1 for i in B: Ans.append(ans) u, v = UV[i] u, v = u-1, v-1 lu = root(u) lv = root(v) if lu == lv: continue c0 = L[lu] c1 = L[lv] unite(u, v) ln = root(u) ans -= c0 * c1 L[ln] = c0 + c1 Ans = Ans[::-1] for ans in Ans: print(ans)