#include <bits/stdc++.h>
using namespace std;

#define INF 1000000007

typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<vector<int> > vvi;
typedef pair<int,int> ii;
typedef vector<pair<int,int> > vii;
typedef vector<vector<pair<int,int> > > vvii;

#define all(x) (x).begin(), (x).end()
#define nall(x) (x).rbegin(), (x).rend()
#define tr(x,it) for(auto it = (x).begin();it!=(x).end();++it)
#define ntr(x,it) for(auto it = (x).rbegin();it!=(x).rend();++it)
#define ufy(v) sort(all(v));(v).erase(unique(all((v))),(v).end())
#define sz(a) int((a).size()) 
#define boost ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define pb push_back 
#define PB pop_back
#define pf push_front
#define PF pop_front
#define MP make_pair
#define clr clear
#define rz resize
#define C(a,b) memset(a,b,sizeof(a))
#define ia(a,n) FOR(i,0,n-1)cin>>a[i]
#define ia1(a,n) FOR(i,1,n)cin>>a[i]
#define fpresent(c,x) ((c).find(x) != (c).end())  // set,map
#define present(c,x) (find(all(c),x) != (c).end())  //vector
#define F first
#define S second
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define NFOR(i,a,b) for(int i=a;i>=b;--i)
#define rep(i,n) FOR(i,0,n-1)
#define TCASE int __T;cin>>__T;FOR(Tc,1,__T)
inline int add(int a,int b, int m=INF){a+=b;if(a>=m)a-=m;return a;}
inline int mul(int a,int b, int m=INF){return (int)(((ll)a*(ll)b)%m);}



vii g[910];
int d1[910];
int d2[910];
int ans[150010];
int vis[910];
int son[910];
queue<pair<ii,int> > q;
int main()
{
    boost;
    int n,m;
    while(cin>>n)    
    {
        if(n==0)break;
        cin>>m;
        FOR(i,0,n-1)g[i].clr();
        FOR(i,0,m-1)
        {
            int x,y;
            cin>>x>>y;
            g[x-1].pb({y-1,i});
            ans[i]=0;
        }
        FOR(i,0,n-1)
        {
            FOR(j,0,n-1)d1[j]=d2[j]=INF,vis[j]=-1,son[j]=0;

            tr(g[i],it)son[it->F]=1;

            q.push(MP(MP(i,0),-1));
            d1[0]=0;
            while(!q.empty())
            {
                int now=q.front().F.F;
                int d=q.front().F.S;
                int par=q.front().S;
                q.pop();
                if(now==i)
                {
                    if(vis[now]==-1)vis[now]++;
                    else continue;
                }
                
                else if(vis[now]==-1)
                {
                    d1[now]=d;vis[now]=par;
                }
                else if(vis[now]!=-1 and vis[now]!=INF and vis[now]!=par)
                {
                    d2[now]=d;vis[now]=INF; 
                }
                else continue;

                tr(g[now],it)
                {
                    q.push(MP(MP(it->F,d+1),(now==i)?it->F:par));
                }
            }
            tr(g[i],it)
            {
                if(d2[it->F]!=INF)
                ans[it->S]=d2[it->F];
            }
        }

            FOR(i,0,m-1)
            cout<<ans[i]<<" ";
            cout<<"\n";
    }
    return 0;
}