#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int INF = 1e9;
struct DSU {
vector<int> p, sz;
DSU(int n): p(n+1), sz(n+1,1) {
iota(p.begin(), p.end(), 0);
}
int find(int x){ return p[x]==x? x : p[x]=find(p[x]); }
void unite(int a,int b){
a=find(a); b=find(b);
if(a==b) return;
if (sz[a]<sz[b]) swap(a,b);
p[b]=a; sz[a]+=sz[b];
}
};
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
int n, m;
cin >> n >> m;
DSU dsu(n);
for(int i=0,u,v; i<m; i++){
cin >> u >> v;
dsu.unite(u, v);
}
// Đếm kích thước các component
unordered_map<int,int> freq;
for(int i=1; i<=n; i++){
freq[ dsu.find(i) ]++;
}
// Gom thành vector (size, count)
vector<pair<int,int>> items;
{
unordered_map<int,int> cnt;
for(auto &kv: freq){
cnt[ kv.second ]++;
}
for(auto &kv: cnt){
items.emplace_back(kv.first, kv.second);
}
}
// DP knapsack
vector<int> dp(n+1, INF);
dp[0]=0;
for(auto &it: items){
int s = it.first, c = it.second;
// xử lý bounded knapsack tối ưu
for(int r=0; r<s; ++r){
deque<pair<int,int>> dq;
for(int k=0, j=r; j<=n; ++k, j+=s){
int val = dp[j] - k;
// loại bỏ quá giới hạn c
if(!dq.empty() && dq.front().first < k - c)
dq.pop_front();
// duy trì deque tăng dần theo val
while(!dq.empty() && dq.back().second >= val)
dq.pop_back();
dq.emplace_back(k, val);
// cập nhật dp[j]
dp[j] = dq.front().second + k;
}
}
}
// In kết quả
for(int i=1; i<=n; i++){
if(dp[i] <= n) cout << dp[i]-1;
else cout << -1;
if(i<n) cout << ' ';
}
cout << '\n';
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nOwpjb25zdCBpbnQgSU5GID0gMWU5OwoKc3RydWN0IERTVSB7CiAgICB2ZWN0b3I8aW50PiBwLCBzejsKICAgIERTVShpbnQgbik6IHAobisxKSwgc3oobisxLDEpIHsKICAgICAgICBpb3RhKHAuYmVnaW4oKSwgcC5lbmQoKSwgMCk7CiAgICB9CiAgICBpbnQgZmluZChpbnQgeCl7IHJldHVybiBwW3hdPT14PyB4IDogcFt4XT1maW5kKHBbeF0pOyB9CiAgICB2b2lkIHVuaXRlKGludCBhLGludCBiKXsKICAgICAgICBhPWZpbmQoYSk7IGI9ZmluZChiKTsKICAgICAgICBpZihhPT1iKSByZXR1cm47CiAgICAgICAgaWYgKHN6W2FdPHN6W2JdKSBzd2FwKGEsYik7CiAgICAgICAgcFtiXT1hOyBzelthXSs9c3pbYl07CiAgICB9Cn07CgppbnQgbWFpbigpewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsKCiAgICBpbnQgbiwgbTsKICAgIGNpbiA+PiBuID4+IG07CiAgICBEU1UgZHN1KG4pOwogICAgZm9yKGludCBpPTAsdSx2OyBpPG07IGkrKyl7CiAgICAgICAgY2luID4+IHUgPj4gdjsKICAgICAgICBkc3UudW5pdGUodSwgdik7CiAgICB9CiAgICAvLyDEkOG6v20ga8OtY2ggdGjGsOG7m2MgY8OhYyBjb21wb25lbnQKICAgIHVub3JkZXJlZF9tYXA8aW50LGludD4gZnJlcTsKICAgIGZvcihpbnQgaT0xOyBpPD1uOyBpKyspewogICAgICAgIGZyZXFbIGRzdS5maW5kKGkpIF0rKzsKICAgIH0KICAgIC8vIEdvbSB0aMOgbmggdmVjdG9yIChzaXplLCBjb3VudCkKICAgIHZlY3RvcjxwYWlyPGludCxpbnQ+PiBpdGVtczsKICAgIHsKICAgICAgICB1bm9yZGVyZWRfbWFwPGludCxpbnQ+IGNudDsKICAgICAgICBmb3IoYXV0byAma3Y6IGZyZXEpewogICAgICAgICAgICBjbnRbIGt2LnNlY29uZCBdKys7CiAgICAgICAgfQogICAgICAgIGZvcihhdXRvICZrdjogY250KXsKICAgICAgICAgICAgaXRlbXMuZW1wbGFjZV9iYWNrKGt2LmZpcnN0LCBrdi5zZWNvbmQpOwogICAgICAgIH0KICAgIH0KICAgIC8vIERQIGtuYXBzYWNrCiAgICB2ZWN0b3I8aW50PiBkcChuKzEsIElORik7CiAgICBkcFswXT0wOwogICAgZm9yKGF1dG8gJml0OiBpdGVtcyl7CiAgICAgICAgaW50IHMgPSBpdC5maXJzdCwgYyA9IGl0LnNlY29uZDsKICAgICAgICAvLyB44butIGzDvSBib3VuZGVkIGtuYXBzYWNrIHThu5FpIMawdQogICAgICAgIGZvcihpbnQgcj0wOyByPHM7ICsrcil7CiAgICAgICAgICAgIGRlcXVlPHBhaXI8aW50LGludD4+IGRxOwogICAgICAgICAgICBmb3IoaW50IGs9MCwgaj1yOyBqPD1uOyArK2ssIGorPXMpewogICAgICAgICAgICAgICAgaW50IHZhbCA9IGRwW2pdIC0gazsKICAgICAgICAgICAgICAgIC8vIGxv4bqhaSBi4buPIHF1w6EgZ2nhu5tpIGjhuqFuIGMKICAgICAgICAgICAgICAgIGlmKCFkcS5lbXB0eSgpICYmIGRxLmZyb250KCkuZmlyc3QgPCBrIC0gYykKICAgICAgICAgICAgICAgICAgICBkcS5wb3BfZnJvbnQoKTsKICAgICAgICAgICAgICAgIC8vIGR1eSB0csOsIGRlcXVlIHTEg25nIGThuqduIHRoZW8gdmFsCiAgICAgICAgICAgICAgICB3aGlsZSghZHEuZW1wdHkoKSAmJiBkcS5iYWNrKCkuc2Vjb25kID49IHZhbCkKICAgICAgICAgICAgICAgICAgICBkcS5wb3BfYmFjaygpOwogICAgICAgICAgICAgICAgZHEuZW1wbGFjZV9iYWNrKGssIHZhbCk7CiAgICAgICAgICAgICAgICAvLyBj4bqtcCBuaOG6rXQgZHBbal0KICAgICAgICAgICAgICAgIGRwW2pdID0gZHEuZnJvbnQoKS5zZWNvbmQgKyBrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgLy8gSW4ga+G6v3QgcXXhuqMKICAgIGZvcihpbnQgaT0xOyBpPD1uOyBpKyspewogICAgICAgIGlmKGRwW2ldIDw9IG4pIGNvdXQgPDwgZHBbaV0tMTsKICAgICAgICBlbHNlIGNvdXQgPDwgLTE7CiAgICAgICAgaWYoaTxuKSBjb3V0IDw8ICcgJzsKICAgIH0KICAgIGNvdXQgPDwgJ1xuJzsKICAgIHJldHVybiAwOwp9Cg==