#include<bits/stdc++.h>
#define INF 0x7fffffff
const int N=1e5+5;
using namespace std;
int t,n,a[N],f[24],ans=INF;
bool check(int g[24])
{
for(int i=3; i<=17; i++)
{
if(g[i]!=0) return false;
}
return true;
}
void dfs(int x,int g[24])
{
if(x>ans) return;
if(check(g))
{
ans=min(ans,x);
return;
}
int k=0;
for(int i=3; i<=14; i++)
{
if(g[i]<1) k=0;
else k++;
if(k>=5)
{
for(int j=i-k+1; j<=i; j++) g[i]--;
dfs(x+1,g);
for(int j=i-k+1; j<=i; j++) g[i]++;
}
}
int w=0;
for(int i=3; i<=14; i++)
{
if(g[i]<2) w=0;
else w++;
if(w>=3)
{
for(int j=i-w+1; j<=i; j++) g[i]-=2;
dfs(x+1,g);
for(int j=i-w+1; j<=i; j++) g[i]+=2;
}
}
int l=0;
for(int i=3; i<=14; i++)
{
if(g[i]<3) l=0;
else l++;
if(l>=2)
{
for(int j=i-l+1; j<=i; j++) g[i]-=2;
dfs(x+1,g);
for(int j=i-l+1; j<=i; j++) g[i]+=2;
}
}
if(g[16]==1&&g[17]==1)
{
g[16]-1,g[17]-1;
dfs(x+1,g);
g[16]+1;g[17]+1;
}
for(int i=3; i<=15; i++)
{
if(g[i]==1)
{
g[i]--;
dfs(x+1,g);
g[i]++;
}
if(g[i]==2)
{
g[i]-=2;
dfs(x+1,g);
g[i]+=2;
}
if(g[i]==3)
{
g[i]-=3;
dfs(x+1,g);
g[i]+=3;
for(int j=3; j<=15; j++)
{
if(g[j]==1)
{
g[i]-=3;
g[j]--;
dfs(x+1,g);
g[i]+=3;
g[j]++;
}
if(g[j]==2)
{
g[i]-=3;
g[j]-=2;
dfs(x+1,g);
g[i]+=3;
g[j]+=2;
}
}
}
if(g[i]==4)
{
g[i]-=4;
dfs(x+1,g);
g[i]+=4;
for(int j=3; j<=15; j++)
{
for(int k=3; k<=15; k++)
{
if(g[j]>=1&&g[k]>=1)
{
g[j]--;
g[k]--;
dfs(x+1,g);
g[j]++;
g[k]++;
}
}
}
}
}
}
int main()
{
cin>>t>>n;
while(t--)
{
memset(a,0,sizeof(a));
memset(f,0,sizeof(f));
for(int i=1,b; i<=n; i++)
{
cin>>a[i]>>b;
if(a[i]==1) f[14]++;
else if(a[i]==2) f[15]++;
else if(a[i]==0&&b==1) f[16]++;
else if(a[i]==0&&b==2) f[17]++;
else f[a[i]]++;
}
dfs(0,f);
cout<<ans<<endl;
}
return 0;
}