最小路徑覆蓋=n(節點數)-最大匹配數*/
#include<stdio.h>
#include<string.h>
const int max=125;
int g[max][max];
bool use[max];
int link[max];
int uN,vN;
bool dfs(int u)
{
int v;
for(v=1;v<=vN;v++)
{
if(!use[v]&&g[u][v])
{
use[v]=true;
if(link[v]==-1 || dfs(link[v]) )
{
link[v]=u;
return true;
}
}
}
return false;
}
int hungary()
{
int u,res=0;
memset(link,-1,sizeof(link));
for(u=1;u<=uN;u++)
{
memset(use,0,sizeof(use));
if(dfs(u)) res++;
}
return res;
}
int main()
{
int i,j,k,n,m;
int T;
scanf("%d",&T);
while(T--)
{
memset(g,0,sizeof(g));
scanf("%d%d",&n,&m);
int ai,bi,di;
for(i=1;i<=m;i++)
{
scanf("%d%d",&ai,&bi);
g[ai][bi]=1;
}
uN=n; vN=n;
printf("%d\n",n-hungary());
}
return 0;
}