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