/*input
1
3 2
1 2
2 3
*/

#include <bits/stdc++.h>

using namespace std;

typedef unsigned long long int ull;
typedef long long ll;
typedef pair<int,int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;

#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define all(x) (x).begin(),(x).end()
#define sz(x) ((int)(x).size())
#define pb push_back
#define mp make_pair
#define pq priority_queue
#define fi first
#define se second
#define INF    0x3f3f3f3f
#define NEGINF 0xC0C0C0C0
#define LINF   0x3f3f3f3f3f3f3f3fLL
#define EPS 1e-10
#define PI 2 * acos(0)
#define NULO -1
#define endl '\n'

const ll mod=1000000007;
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}

int cmp(double x, double y = 0, double tol = EPS){ return (x <= y + tol) ? (x + tol < y) ? -1 : 0 : 1; }

int n,m;
vector<vi> adj,adjt;
vi num,s;

void k(int u, int pass){
	num[u]=1;
	vi ni;
	if(pass==1)
		ni=adj[u];
	else
		ni=adjt[u];
	rep(i,0,ni.size()){
		int v=ni[i];
		if(num[v]==-1)
			k(v,pass);
	}
	s.pb(u);
}

int main(){
	int t,a,b;
	scanf("%d",&t);
	while(t--){
		scanf("%d %d",&n,&m);
		adj.assign(n,vi());
		adjt.assign(n,vi());
		rep(i,0,m){
			scanf("%d %d",&a,&b);
			a--;b--;
			adj[b].pb(a);
			adjt[a].pb(b);
		}
		s.clear();
		num.assign(n,-1);
		rep(i,0,n)
			if(num[i]==-1)
				k(i,1);
		int numscc=0;
		num.assign(n,-1);
		//reverse(s.begin(),s.end());
		rep(i,0,n)
			if(num[s[i]]==-1){
				//printf("%d",i );
				numscc++;
				k(s[i],2);
			}
		printf("%d\n",numscc);	
	}
		


return 0;
}