#include <bits/stdc++.h> using namespace std; #define ll long long int void topo(vector<vector<int>> &adj, vector<int> &v) { int n = adj.size()-1; vector<bool> vis(n+1,false); map<int,int> deg; for(int i=1;i<=n;i++) { for(int x:adj[i]) ++deg[x]; } queue<int> q; for(int i=1;i<=n;i++) if(deg[i]==0) { vis[i]= true; q.push(i); } while(!q.empty()) { int curr= q.front(); q.pop(); v.push_back(curr); for(int x:adj[curr]) { //cout<<x<<" "; if(vis[x]) continue; --deg[x]; if(deg[x]==0) { vis[x]=true; q.push(x); } } } } void mainSolve() { int n,m; cin>>n>>m; vector<vector<int>> adj(n+1); for(int i=0;i<m;i++) { int a,b; cin>>a>>b; adj[a].push_back(b); } vector<int> order; topo(adj,order); if(order.size() != n) { cout<<-1<<endl; return; } int ans = 0; for(int i=1;i<=n;i++) { if(adj[i].size() == 0) ++ans; } --ans; cout<<ans<<endl; } int main() { int t; cin>>t; while (t--) { mainSolve(); } return 0; }