#include<bits/stdc++.h>
using namespace std;
const int maxn=1000000+10;
int n,m;
bool vis[maxn];
int dis[maxn],cnt[maxn];
struct node{
int to,w;
node(int t,int ww){
to=t; w=ww;
}
};
vector<node> vec[maxn*2];
struct qnode{
int id,d;
qnode(int i,int x){
id=i; d=x;
}
friend bool operator <(qnode n1,qnode n2){
return n1.d>n2.d;
}
};
priority_queue<qnode> q;
void dij(int s){
memset(dis,INT_MAX,sizeof(dis));
memset(cnt,0,sizeof(cnt));
q.push((qnode){s,0}); cnt[s]++; dis[s]=0;
while(!q.empty()){
int x=q.top().id; q.pop();
for(int i=0;i<vec[x].size();i++){
int y=vec[x][i].to;
if(dis[y]>dis[x]+vec[x][i].w){
dis[y]=dis[x]+vec[x][i].w;
cnt[y]=1;
q.push((qnode){y,dis[y]});
}
else if(dis[y]==dis[x]+vec[x][i].w) cnt[y]++;
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v;
cin>>u>>v;
vec[u].push_back(node(v,1));
}
dij(1);
for(int i=1;i<=n;i++) cout<<cnt[i]<<endl;
return 0;
}