// ROOT : DRAGON3012009
#include <bits/stdc++.h>
#define ll long long
#define el "\n"
#define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define __ROOT__ int main()
#pragma GCC optimize("O2")
#define fi first
#define se second
#define M 1000000007
#define MAXN 1000001
#define INF 1000000000000
#define BLOCK_SIZE 425
#define MAX_NODE 1001001
#define LOG 19
#define ALPHA_SIZE 26
#define BASE 311
#define NAME "file"
#define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end()); // dùng để nén sort mảng compare
using namespace std;
const ll MOD[] = {(ll)1e9 + 2277, (ll)1e9 + 5277, (ll)1e9 + 8277, (ll)1e9 + 9277, (ll) 1e9 + 7 };
const ll NMOD = 1;
const int dx[] = {-1, 0, 1,0};
const int dy[] = {0, 1, 0, -1};
//**Variable**//
ll n , ans, m ;
ll arr[MAXN];
ll res[MAXN] ;
ll lab[MAXN] ;
pair<ll,ll> edge[MAXN] ;
//**Struct**//
//**Function**//
ll find_set(ll a ) {
return lab[a] < 0 ? a : lab[a] = find_set(lab[a]) ;
}
void union_set(ll a , ll b ) {
a = find_set(a) ;
b = find_set(b) ;
if(a == b ) return ;
if(lab[a] > lab[b])swap(a , b) ;
ll sz_a = -lab[a] , sz_b = - lab[b] ;
lab[a] += lab[b] ;
lab[b] = a ;
ans =ans - (n - sz_a) * sz_a - (n - sz_a - sz_b ) * sz_b + (sz_a + sz_b) *(n - sz_a - sz_b) ;
}
void init() {
cin>>n >> m ;
memset(lab , -1 , sizeof lab) ;
ans = n * (n - 1) /2;
for(ll i = 1 ; i <= m ; i ++ )cin>>edge[i].fi >> edge[i].se ;
}
void solve() {
for(ll i = m ; i >= 1 ; i -- ) {
res[i] = ans ;
union_set(edge[i].fi , edge[i].se ) ;
}
for(ll i = 1 ; i <= m ; i ++ ) cout<<res[i] << el;
}
__ROOT__ {
// freopen(NAME".inp" , "r" , stdin);
// freopen(NAME".out" , "w", stdout) ;
fast;
init();
solve();
}
Ly8gUk9PVCA6IERSQUdPTjMwMTIwMDkKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgZWwgIlxuIgojZGVmaW5lIGZhc3QgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiNkZWZpbmUgX19ST09UX18gaW50IG1haW4oKQojcHJhZ21hIEdDQyBvcHRpbWl6ZSgiTzIiKQojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgTSAxMDAwMDAwMDA3CiNkZWZpbmUgTUFYTiAxMDAwMDAxCiNkZWZpbmUgSU5GIDEwMDAwMDAwMDAwMDAKI2RlZmluZSBCTE9DS19TSVpFIDQyNQojZGVmaW5lIE1BWF9OT0RFIDEwMDEwMDEKI2RlZmluZSBMT0cgMTkKI2RlZmluZSBBTFBIQV9TSVpFIDI2CiNkZWZpbmUgQkFTRSAzMTEKI2RlZmluZSBOQU1FICJmaWxlIgojZGVmaW5lIGNvbXBhcmUodikgc29ydCgodikuYmVnaW4oKSwgKHYpLmVuZCgpKTsgKHYpLmVyYXNlKHVuaXF1ZSgodikuYmVnaW4oKSwgKHYpLmVuZCgpKSwgKHYpLmVuZCgpKTsgLy8gZMO5bmcgxJHhu4MgbsOpbiBzb3J0IG3huqNuZyBjb21wYXJlCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGxsIE1PRFtdID0geyhsbCkxZTkgKyAyMjc3LCAobGwpMWU5ICsgNTI3NywgKGxsKTFlOSArIDgyNzcsIChsbCkxZTkgKyA5Mjc3LCAobGwpIDFlOSArIDcgfTsKY29uc3QgbGwgTk1PRCA9IDE7CmNvbnN0IGludCBkeFtdID0gey0xLCAwLCAxLDB9Owpjb25zdCBpbnQgZHlbXSA9IHswLCAxLCAwLCAtMX07Ci8vKipWYXJpYWJsZSoqLy8KbGwgbiAsIGFucywgbSAgOwpsbCBhcnJbTUFYTl07CmxsIHJlc1tNQVhOXSA7CmxsIGxhYltNQVhOXSAgOwpwYWlyPGxsLGxsPiBlZGdlW01BWE5dICA7Ci8vKipTdHJ1Y3QqKi8vCgovLyoqRnVuY3Rpb24qKi8vCmxsIGZpbmRfc2V0KGxsIGEgKSB7CnJldHVybiBsYWJbYV0gPCAwID8gYSA6IGxhYlthXSA9IGZpbmRfc2V0KGxhYlthXSkgOwp9CnZvaWQgdW5pb25fc2V0KGxsIGEgLCBsbCBiICkgewphID0gZmluZF9zZXQoYSkgOwpiID0gZmluZF9zZXQoYikgOwppZihhID09IGIgKSByZXR1cm4gOwppZihsYWJbYV0gPiBsYWJbYl0pc3dhcChhICwgYikgOwpsbCBzel9hID0gLWxhYlthXSAsIHN6X2IgPSAtIGxhYltiXSA7CmxhYlthXSArPSBsYWJbYl0gOwpsYWJbYl0gPSBhIDsKYW5zID1hbnMgIC0gKG4gLSBzel9hKSAqIHN6X2EgIC0gKG4gLSBzel9hIC0gc3pfYiApICogc3pfYiArIChzel9hICsgc3pfYikgKihuIC0gc3pfYSAtIHN6X2IpIDsKfQp2b2lkIGluaXQoKSB7CiAgICBjaW4+Pm4gPj4gbSA7CiAgICBtZW1zZXQobGFiICwgLTEgLCBzaXplb2YgbGFiKSA7CiAgICBhbnMgPSBuICogKG4gLSAxKSAvMjsKICAgIGZvcihsbCBpID0gMSA7IGkgPD0gbSA7IGkgKysgKWNpbj4+ZWRnZVtpXS5maSA+PiBlZGdlW2ldLnNlICA7Cn0KCnZvaWQgc29sdmUoKSB7Cgpmb3IobGwgaSA9IG0gOyBpID49ICAxIDsgaSAtLSApIHsKICAgIHJlc1tpXSA9IGFucyA7CiAgICB1bmlvbl9zZXQoZWRnZVtpXS5maSAsIGVkZ2VbaV0uc2UgKSA7Cn0KZm9yKGxsIGkgPSAxIDsgaSA8PSBtIDsgaSArKyApIGNvdXQ8PHJlc1tpXSA8PCBlbDsKfQoKX19ST09UX18gewovLyAgICAgZnJlb3BlbihOQU1FIi5pbnAiICwgInIiICwgc3RkaW4pOwovLyAgICAgZnJlb3BlbihOQU1FIi5vdXQiICwgInciLCBzdGRvdXQpIDsKICAgIGZhc3Q7CiAgICBpbml0KCk7CiAgICBzb2x2ZSgpOwp9CgoKCg==