67分
#6、#16~#25 WA
#include<bits/stdc++.h>
using namespace std;
int n,m;
int ver[300005],ne[300005],head[300005],cnt;
inline void link(int x,int y){
ver[++cnt]=y;
ne[cnt]=head[x];
head[x]=cnt;
}
int dep[300005];
int fa[20][300005];
inline int lca(int x,int y){
if(dep[x]<dep[y])swap(x,y);
for(int i=19;~i;i--)if(dep[fa[i][x]]>=dep[y]){
// printf(" %d %d %d %d\n",x,y,dep[x],dep[y]);
x=fa[i][x];
}
for(int i=19;~i;i--){
if(fa[i][x]!=fa[i][y]){
// printf(" %d %d\n",x,y);
x=fa[i][x];
y=fa[i][y];
}
}
return x==y?x:fa[0][x];
}
int stk[300005],top;
bool vis[300005];
void dfs(int x){
vis[x]=1;
for(int i=head[x];i;i=ne[i]){
int u=ver[i];
if(!vis[u])dfs(u);
}
stk[++top]=x;
}
inline void build(){
for(int i=0;i<20;i++)fa[i][1]=1;
while(top){
int x=stk[top];top--;
// printf("%d:\n",x);
for(int i=head[x];i;i=ne[i]){
int u=ver[i];
if(!fa[0][u])fa[0][u]=x;
else fa[0][u]=lca(x,fa[0][u]);
dep[u]=dep[fa[0][u]]+1;
for(int i=1;i<20;i++)fa[i][u]=fa[i-1][fa[i-1][u]];
// printf("%d %d %d\n",u,fa[0][u],dep[u]);
}
}
}
int siz[300005];
void dfs2(int x){
siz[x]=1;
for(int i=head[x];i;i=ne[i]){
int u=ver[i];
dfs2(u);
siz[x]+=siz[u];
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
int x,y;
scanf("%d%d",&x,&y);
if(y!=1)link(x,y);
}
dfs(1);
build();
memset(head,0,sizeof(head));
cnt=0;
for(int i=2;i<=n;i++)link(fa[0][i],i);
dfs2(1);
for(int i=1;i<=n;i++)printf("%d ",siz[i]);
return 0;
}