#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 300000 + 100;
vector<int> vec[maxn];
int dis[maxn], dis2[maxn], vis[maxn];
signed main() {
ios::sync_with_stdio(0); cin.tie(0);
int n, m; cin >> n >> m;
for(int i=1; i<=m; ++i) {
int a, b; cin >> a >> b;
vec[a].push_back(b);
vec[b].push_back(a);
}
for(int i=0; i<=n; ++i) {
dis[i] = 1e16;
}
queue<int> que;
que.push(1);
vis[1] = 1;
dis[1] = 0;
while(!que.empty()) {
int now = que.front(); que.pop();
for(int i=0; i<vec[now].size(); ++i) {
int to = vec[now][i];
if(!vis[to]) {
que.push(to);
vis[to] = 1;
dis[to] = dis[now] + 1;
}
}
}
while(!que.empty()) {
que.pop();
}
for(int i=0; i<=n; ++i) {
dis2[i] = 1e16;
}
que.push(n);
vis[n] = 1;
dis2[n] = 0;
while(!que.empty()) {
int now = que.front(); que.pop();
for(int i=0; i<vec[now].size(); ++i) {
int to = vec[now][i];
if(!vis[to]) {
que.push(to);
vis[to] = 1;
dis2[to] = dis2[now] + 1;
}
}
}
for(int i=1; i<=n; ++i) {
if(min(dis[0], dis[i]) + min(dis2[0], dis2[i]) <= dis[n]) {
if(min(dis[0], dis[i]) + min(dis2[0], dis2[i]) >= 1e16) cout << -1 << " ";
else cout << min(dis[0], dis[i]) + min(dis2[0], dis2[i]) << " ";
} else {
if(dis[n] >= 1e16) cout << -1 << " ";
else cout << dis[n] << " ";
}
}
return 0;
}