#include<iostream>
#include<cstring>
using namespace std;
int INF=0x7fffffff;
int t,n;
int cnt[20];
int ans;
void dfs(int x){
if(x>=ans)return ;
int k;
k=0;
for(int i=3;i<=14;i++){
if(!cnt[i])k=0;
else{
k++;
if(k>=5){
for(int j=i-k+1;j<=i;j++)cnt[j]--;
dfs(x+1);
for(int j=i-k+1;j<=i;j++)cnt[j]++;
}
}
}
k=0;
for(int i=3;i<=14;i++){
if(cnt[i]<2)k=0;
else{
k++;
if(k>=3){
for(int j=i-k+1;j<=i;j++)cnt[j]-=2;
dfs(x+1);
for(int j=i-k+1;j<=i;j++)cnt[j]+=2;
}
}
}
k=0;
for(int i=3;i<=14;i++){
if(cnt[i]<3)k=0;
else{
k++;
if(k>=2){
for(int j=i-k+1;j<=i;j++)cnt[j]-=3;
dfs(x+1);
for(int j=i-k+1;j<=i;j++)cnt[j]+=3;
}
}
}
for(int i=3;i<=15;i++){
if(cnt[i]>=3){
cnt[i]-=3;
for(int j=3;j<=17;j++){
if(!cnt[j]||i==j)continue;
cnt[j]--;
dfs(x+1);
cnt[j]++;
}
for(int j=3;j<=15;j++){
if(cnt[j]<2||i==j)continue;
cnt[j]-=2;
dfs(x+1);
cnt[j]+=2;
}
cnt[i]+=3;
}
if(cnt[i]>=4){
cnt[i]-=4;
for(int j=3;j<=17;j++){
if(!cnt[j]||i==j)continue;
cnt[j]--;
for(int k=3;k<=17;k++){
if(!cnt[k])continue;
cnt[k]--;
dfs(x+1);
cnt[k]++;
}
cnt[j]++;
}
for(int j=3;j<=15;j++){
if(cnt[j]<2||i==j)continue;
cnt[j]-=2;
for(int k=3;k<=15;k++){
if(cnt[k]<2)continue;
cnt[k]-=2;
dfs(x+1);
cnt[k]+=2;
}
cnt[j]+=2;
}
cnt[i]-=4;
}
}
if(cnt[16]&&cnt[17]){
x++;
}
else{
if(cnt[16])x++;
if(cnt[17])x++;
}
for(int i=3;i<=15;i++){
if(cnt[i])x++;
}
ans=min(ans,x);
}
int main(){
cin>>t>>n;
while(t--){
memset(cnt,0,sizeof(cnt));
for(int i=1;i<=n;i++){
int a,b;
cin>>a>>b;
if(a==0&&b==1)cnt[16]++;
else if(a==0&&b==2)cnt[17]++;
else if(a==1)cnt[14]++;
else if(a==2)cnt[15]++;
else cnt[a]++;
}
ans=INF;
dfs(0);
cout<<ans<<endl;
}
return 0;
}