#include<bits/stdc++.h>
#define ll long long
ll read(){
	ll x=1,y=0;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-') x=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		y=(y<<1)+(y<<3)+(c^48);
		c=getchar();
	}
	return x*y;
}
void write(ll x){
	if(x<0) putchar('-'),x=-x;
	if(x>9){
		write(x/10);
	}
	putchar(x%10+'0');
}
using namespace std;
const int N=400010;

ll n1,m1;
ll n,m;
ll d[N],f[N],ans;
ll q[N],l,r;
ll fa[N],siz[N];
ll num[N];

ll fnd(ll x){
	if(fa[x]==x) return x;
	return fa[x]=fnd(fa[x]);
}

int main(){
    cin>>n1>>m1;
    for(int i=1;i<=n1;i++) fa[i]=i,siz[i]=1;
    for(int i=1;i<=m1;i++){
    	ll x,y;
    	cin>>x>>y;
    	ll fx=fnd(x),fy=fnd(y);
    	if(fx!=fy){
    		fa[fy]=fx;
    		siz[fx]+=siz[fy];
    		siz[fy]=0;
    	}
    }
    for(int i=1;i<=n1;i++){
    	if(siz[i]>0){
    		num[siz[i]]++;
    	}
    }
    
    n=m=n1;
    for(int i=1;i<=m;i++) d[i]=-0x3f3f3f3f3f3f3f3f;
    for(int i=1;i<=n;i++){
        ll x,y,z;
        y=i;z=-1;x=num[i];
        // cin>>y>>z>>x;
//         memset(f,0,sizeof(f));
        for(int j=1;j<=m*2;j++){
            f[j]=-0x3f3f3f3f3f3f3f;
        }
        f[0]=0;
        for(int j=0;j<y;j++){
            ll w=(m-j)/y+1;
            l=1;r=0;
            for(int k=0;k<=w&&k*y+j<=m;k++){
                // if(k*y+j==0) continue;
                ll u=k*y+j;
                while(l<=r&&k-q[l]>x) l++;
                
                if(l<=r){
                    f[u]=max(f[u],d[q[l]*y+j]-q[l]*z+k*z);
                }
                
                while(l<=r&&d[q[r]*y+j]-q[r]*z<=d[u]-k*z) r--;
                
                q[++r]=k;
            }
        }
        for(int j=1;j<=m;j++){
            d[j]=max(d[j],f[j]);
//            f[j]=-0x3f3f3f3f3f3f3f3f;
            // cout<<f[j]<<" ";
        }
        // cout<<endl;
    }
    for(int i=1;i<=m;i++){
        if(d[i]<-2*n) cout<<-1<<endl;
    	else cout<<-d[i]-1<<endl;
    }
    return 0;
}