#include <bits/stdc++.h>
// #pragma GCC optimize("O3", "unroll-loops")
#define ll long long
#define int long long
#define pb push_back
#define fi first
#define se second
#define lf ((id<<1))
#define rg ((id<<1)|1)
#define md ((l+r)>>1)
#define ld long double
using namespace std;
typedef pair<ll,ll> pii;
typedef pair<pii,ll> ipii;
const int MAXN = 3e5+10;
const int LOG = 20;
const int VAL = 2520;
const int MAXA = 1e6+10;
const int MOD = 1e9+7;
const ll INF = 1e9+10;
const ld EPS = 1e-12;
void chmn(auto &a, auto b){ a = min(a, b); }
void chmx(auto &a, auto b){ a = max(a, b); }
int sum(int a, int b){ a %= MOD; b += MOD; b %= MOD; return (a+MOD+b)%MOD; }
void chsum(int &a, int b){ a = sum(a, b); }
int mul(int a, int b){ a %= MOD; b %= MOD; return (a*b)%MOD; }
void chmul(int &a, int b){ a = mul(a, b); }
int expo(int a, int b){
if(b==0) return 1;
int te = expo(a, b/2); te = mul(te,te); // temporary -> te
return (b%2 ? mul(te, a) : te);
}
int n, m, x[MAXN], y[MAXN], ans[MAXN];
vector<pii> upd[MAXN]; // di idx ini updaetnya apa
struct seg {
pii st[4*MAXN];
void bd(int id,int l,int r){
if(l==r){
st[id].se = -l; return;
}
bd(lf,l,md); bd(rg,md+1,r);
st[id] = max(st[lf], st[rg]);
}
pii que(int id,int l,int r,int x,int y){
if(x<=l && r<=y) return st[id];
if(r<x || y<l) return pii(-INF, -1);
return max(que(lf,l,md,x,y), que(rg,md+1,r,x,y));
}
pii upd(int id,int l,int r,int x,int p){
if(l==r && l==x){ st[id].fi += p; return st[id]; }
if(r<x || x<l) return st[id];
return st[id] = max(upd(lf,l,md,x,p), upd(rg,md+1,r,x,p));
}
} A;
vector<int> vec[MAXN];
int l[MAXN], r[MAXN], gan[MAXN]; // reidxnya
set<int> s[MAXN];
signed main(){
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1; i<=n; i++){
l[i] = -1; r[i] = -1;
s[i].insert(m+1);
}
for(int i=1; i<=m; i++){
cin>>x[i]>>y[i]; x[i]++; y[i]++; // y masukin ke x
s[x[i]].insert(i); s[y[i]].insert(i);
if(vec[x[i]].size() < vec[y[i]].size()) swap(vec[x[i]], vec[y[i]]);
for(auto in : vec[y[i]]) vec[x[i]].pb(in);
vec[x[i]].pb(i);
vec[y[i]].clear();
}
int cnt = 0;
for(int i=1; i<=n; i++){
for(auto in : vec[i]){
gan[in] = ++cnt; // in diganti jd cnt
// cout << in << ' '<< cnt << " gan\n";
}
}
for(int i=1; i<=m; i++){ // medal, turni, tambahin sm medali baru
int le = i, ri = i; // winner ada ini
if(l[x[i]]==-1 && l[y[i]]==-1){
le = gan[i]; ri = gan[i];
} else if(l[x[i]]==-1){
le = l[y[i]]; ri = r[y[i]];
} else if(l[y[i]]==-1){
le = l[x[i]]; ri = r[x[i]];
} else {
le = min(l[x[i]], l[y[i]]); ri = max(r[x[i]], r[y[i]]);
}
chmn(le, gan[i]); chmx(ri, gan[i]);
int tim = *s[x[i]].upper_bound(i)-i; // nanti dia ada lagi
upd[le].pb({x[i], tim}); upd[ri+1].pb({x[i], -tim});
l[x[i]] = le; r[x[i]] = ri;
// cout << x[i] << ' '<<le<<' '<<ri<<" ler\n";
l[y[i]] = r[y[i]] = -1;
}
A.bd(1,1,n);
for(int i=1; i<=m; i++){
for(auto [id, val] : upd[i]){
A.upd(1,1,n,id,val);
}
int idx = -A.que(1,1,n,1,n).se;
ans[idx]++;
}
for(int i=1; i<=n; i++) cout << ans[i] << " \n"[i==n];
}