#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define ii pair<ll,ll>
#define MP make_pair
#define MOD7 1000000007
#define MOD9 1000000009
void printGoogleAns(int ans, int caseNum){
    cout << "Case #" << caseNum << ": " << ans << endl;
}

// BLACK - 0
//WHITE - 1
//GREY - 2
ll t;
ll n, m;
vector<vector<int>> g;
set<ll> s[2];
vector<int> col;
void dfs(int node){
    col[node] = 2;
    for(auto v: g[node]){
        if(col[v] == 1){
            dfs(v);
        }else{
            if(col[v] == 0){
                s[0].insert(v);
            }else{
                s[1].insert(v);
            }
        }
    }
    col[node] = 0;
}

void normaldfs(int node, vector<int> &col1){
    //cout << "reached :" << node << endl;
    col1[node] = 0;
    for(auto v: g[node]){
        if(col1[v] == 1){
            //cout << "checking :" << v << " " << col1[v] << endl;
            normaldfs(v, col1);
        }
    }
}

void solve(){
    col.clear();
    for(auto &i: s){
        i.clear();
    }
    g.clear();
    cin >> n >> m;
    col.resize(n + 1, 1);
    g.resize(n + 1);
    for(int i = 0;i < m;i++){
        ll s,e;
        cin >> s >> e;
        g[s].push_back(e);
    }

    dfs(1);
    // cout << "2 paths :";
    // for(auto i: s[0]){
    //     cout << i << " ";
    // }
    // cout << endl;
    // cout << "infinite paths :";
    // for(auto i: s[1]){
    //     cout << i << " ";
    // }
    // cout << endl;
    // cout << "col : ";
    // for(auto i: col){
    //     cout << i << " ";
    // }
    // cout << endl;
    vector<int> col1;
    col1.clear();
    col1.resize(n + 1, 1);
    for(auto i: s[0]){
        if(col1[i] == 1){
            normaldfs(i, col1);
        }
    }
    // cout << "col1 : ";
    // for(auto i: col1){
    //     cout << i << " ";
    // }
    // cout << endl;
    vector<int> col2;
    col2.resize(n + 1, 1);
    for(auto i: s[1]){
        if(col2[i]== 1){
            normaldfs(i, col2);
        }
    }
    // cout << "col2 : ";
    // for(auto i: col2){
    //     cout << i << " ";
    // }
    // cout << endl;

    vector<int> ans(n + 1,0);
    for(int i = 1;i < n + 1;i++){
        if(col[i] == 1){
            ans[i] = 0;
        }else{
            if(col2[i] == 0){
                ans[i] = -1;
            }else if(col1[i] == 0){
                ans[i] = 2;
            }else{
                ans[i] = 1;
            }
        }
    }
    for(int i = 1;i < n + 1;i++){
        cout << ans[i] << " ";
    }
    cout << endl;
}

signed main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin >> t;
    while(t--)
    solve();
    return 0;
}