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