#include<bits/stdc++.h>
using namespace std;
vector<int> adj[200000];
int d[200000];
bool vis[200000];
int dp[200000][2];
int dfs(int node,bool used)
{
	if(dp[node][used]!=-1)	return dp[node][used];
	int ans=d[node];
	for(int i=0;i<adj[node].size();i++)
	{
		if(d[adj[node][i]]>d[node])	ans=min(ans,dfs(adj[node][i],used));
		else if(used)	ans=min(ans,dfs(adj[node][i],0));
	}
	return dp[node][used]=ans;
}
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		int n,m;
		cin>>n>>m;
		for(int i=0;i<n;i++)
			{d[i]=0;vis[i]=false;dp[i][0]=dp[i][1]=-1;adj[i].clear();}
		for(int i=0;i<m;i++)
		{
			int u,v;
			cin>>u>>v;
			adj[u-1].push_back(v-1);
		}
		queue<int> bfs;
		bfs.push(0);
		vis[0]=true;
		while(bfs.size())
		{
			int node=bfs.front();
			for(int i=0;i<adj[node].size();i++)
			{
				if(vis[adj[node][i]])	continue;
				bfs.push(adj[node][i]);
				d[adj[node][i]]=d[node]+1;
				vis[adj[node][i]]=true;
			}
			bfs.pop();
		}
		for(int i=0;i<n;i++)
		{
			cout<<dfs(i,1)<<' ';
		}
		cout<<'\n';
	}
}