#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;
}