#include using namespace std; typedef long long ll; typedef vector vi; typedef vector vl; typedef complex P; typedef pair pii; #define REP(i,n) for(ll i=0;i> n >> m; UF uf(n); REP(i,m){ int u,v; cin>>u>>v; --u;--v; uf.unite(u,v); } map szs; REP(i,n){ if(uf.root(i)==i) szs[uf.size(i)]+=1; // szs.push_back(uf.size(i)); } map dp; map::iterator iter; dp[0] = -1; map::iterator iter2; iter2 = szs.begin(); while(iter2!=szs.end()){ ll num = iter2->first; ll cnt = iter2->second; ++iter2; iter = dp.end(); while(iter!=dp.begin()){ --iter; ll id = iter->first; ll val = iter->second; REP(i,cnt){ id += num; if(id>n)break; if(dp.count(id)) dp[id]=min(dp[id],val+1); else dp[id]=val+1; } // if(id+szs[i]<=n){ // if(dp.count(id+szs[i]) == 1) // dp[id+szs[i]] = min(dp[id+szs[i]],val+1); // else // dp[id+szs[i]] = val+1; // } } } REPR(i,n+1){ if(dp.count(i) == 1){ cout << dp[i] << endl; }else{ cout << -1 << endl; } } return 0; }