#include <iostream>
#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")

using namespace std;

char arr[16][16];
int dp[16][1125];
int dp2[1125][1125];
int dp3[1125];

int n,m;

int cases;

int isitok(int a,int nth,int b){

    bool okay=true;

    if(dp3[a]==1){
        okay=false;
    }

    if(dp2[a][b]==1){
        okay=false;
    }

    int ret=0;

    if(okay){
    int ba=a;
    int ab=b;

    char temp[15];
    char temp2[15];

    for(int i=0;i<m;i++){
        if(a%2){
            temp[i]='.';
            ret++;
        }
        else{
            temp[i]='x';
        }
        a/=2;
    }


    for(int i=0;i<m;i++){
        if(temp[i]=='.' && arr[nth][i]=='x'){
            okay=false;
            break;
            //cout<<nth<<ba<<ab<<"는1탈락"<<endl;
        }
    } //앉을 수 있는 자리인지 확인




    if(okay){
    for(int i=0;i<m-1;i++){
        if(temp[i]=='.' && temp[i+1]=='.'){
            okay=false;
            dp3[ba]=1;
            break;
            //cout<<nth<<ba<<ab<<"는2탈락"<<endl;
        }
    }//같이 앉았는지 확인

    if(okay){

    for(int i=0;i<m;i++){
        if(b%2){
            temp2[i]='.';
        }
        else{
            temp2[i]='x';
        }
        b/=2;
    }

    if(okay){

    for(int i=0;i<m;i++){
        if(i-1>=0 && temp[i]=='.' && temp2[i-1]=='.'){
            okay=false;
            dp2[ba][ab]=1;
            dp2[ab][ba]=1;
            break;
            //cout<<nth<<ba<<ab<<"는3탈락"<<endl;
        }
        if(i+1<n && temp[i]=='.' && temp2[i+1]=='.'){
            okay=false;
            dp2[ba][ab]=1;
            dp2[ab][ba]=1;
            break;
            //cout<<nth<<ba<<ab<<"는4탈락"<<endl;
        }
    }

    }
    }
    }
    }

    if(okay){
        return ret;
    }
    else{
        return 0;
    }
}

int main()
{

    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int c;
    cin>>c;

    for(int i=0;i<c;i++){

        cin>>n>>m;

        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                arr[i][j]='\0';
            }
        }

        cases=1;
        for(int i=0;i<m;i++){
            cases*=2;
        }

        for(int i=0;i<n;i++){
            for(int j=0;j<cases;j++){
                dp[i][j]=0;
            }
        }

        for(int j=0;j<n;j++){
            cin>>arr[j];
        }

        for(int k=0;k<cases;k++){
            dp[0][k]=isitok(k,0,0);
        }


        for(int i=1;i<n;i++){
            for(int k=0;k<cases;k++){
                for(int j=0;j<cases;j++){
                    dp[i][k]=max(dp[i][k],dp[i-1][j]+isitok(k,i,j));
                }
            }
        }

        int maxe=0;

        for(int j=0;j<cases;j++){
            maxe=max(maxe,dp[n-1][j]);
        }


        cout<<maxe<<'\n';

    }
}
