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