There are N islands and M bridges.

The i-th bridge connects the A_i-th and B_i-th islands bidirectionally.

Initially, we can travel between any two islands using some of these bridges.

However, the results of a survey show that these bridges will all collapse because of aging, in the order from the first bridge to the M-th bridge.

Let the inconvenience be the number of pairs of islands (a, b) (a < b) such that we are no longer able to travel between the a-th and b-th islands using some of the bridges remaining.

For each i (1 \leq i \leq M), find the inconvenience just after the i-th bridge collapses.

Constraints

* All values in input are integers.
* 2 \leq N \leq 10^5
* 1 \leq M \leq 10^5
* 1 \leq A_i < B_i \leq N
* All pairs (A_i, B_i) are distinct.
* The inconvenience is initially 0.

Input

Input is given from Standard Input in the following format:


N M
A_1 B_1
A_2 B_2
\vdots
A_M B_M


Output

In the order i = 1, 2, ..., M, print the inconvenience just after the i-th bridge collapses. Note that the answer may not fit into a 32-bit integer type.

Examples

Input

4 5
1 2
3 4
1 3
2 3
1 4


Output

0
0
4
5
6


Input

6 5
2 3
1 2
5 6
3 4
4 5


Output

8
9
12
14
15


Input

2 1
1 2


Output

1
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 1e5+5;
int n, m, fa[MAXN];

struct EDGE
{
	int u, v;
}e[MAXN];

long long ans[MAXN], sz[MAXN];

int find(int x)
{
	if(x == fa[x])
		return x;
	return fa[x] = find(fa[x]);
}

int main()
{
	cin >> n >> m;
	
	for(int i = 1; i <= m; ++i)
		cin >> e[i].u >> e[i].v;
	for(int i = 1; i <= n; ++i)
		fa[i] = i, sz[i] = 1;
	
	ans[m] = (long long)n * (n - 1) / 2;
	
	for(int i = m; i >= 1; --i)
	{
		int u = find(e[i].u), v = find(e[i].v);
		
		if(u == v)
			ans[i - 1] = ans[i];
		else
		{
			ans[i - 1] = ans[i] - sz[v] * sz[u];
			sz[v] += sz[u];
			fa[u] = v;
		}
	}
	
	for(int i = 1; i <= m; ++i)
		cout << ans[i] << endl;
	
	return 0;
}