#include <bits/stdc++.h>
#define maxn 200007
using namespace std;
vector<int> ed[maxn];
int vis[maxn];
int main() {
//freopen("inp8.in", "r", stdin);
//freopen("out8.out", "w", stdout);
int t;
cin >> t;
int sm = 0;
while(t--) {
int n,m;
cin >> n >> m;
assert(n > 0 && n <= 200000);
assert(m >= 0 && m <= 400000);
sm += n + m;
for(int i = 1; i <= n; i++) vis[i] = 0, ed[i].clear();
assert(sm > 0 && sm <= 1000000);
set<pair<int, int>> edges;
for(int i = 0;i < m;i++){
int a,b;
cin >> a >> b;
assert(a != b);
assert(edges.find({a, b}) == edges.end());
edges.insert({a, b});
ed[a].push_back(b);
}
int flag = 0;
function<void(int)> dfs = [&](int cur){
vis[cur] = 1;
for(int i = 0;i < ed[cur].size();i++)
if(vis[ed[cur][i]]){
if(vis[ed[cur][i]] - 1);
else flag = 1;
}
else dfs(ed[cur][i]);
vis[cur] = 2;
};
for(int i = 1;i <= n;i++) if(!vis[i]) dfs(i);
if(flag) cout << "-1\n";
else {
int ans = -1;
for(int i = 1; i <= n; i++) if(ed[i].size() == 0) ans++;
cout << ans << "\n";
}
}
}