#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
bool vis[500];
int link[500];
bool gra[500][500];
int map[500][500];
int Pnum;
int v1,v2;
int row,clo;
int t,ans;
int search[4][2] = { {0,1}, {0,-1}, {1,0}, {-1,0} };
bool dfs( int x )
{
for( int y = 1; y <= v2; y++)
{
if(gra[x][y] && ! vis[y])
{
vis[y] = true;
if( !link[y] || dfs(link[y]))
{
link[y] = x;
return true;
}
}
}
return false;
}
void find()
{
for( int i = 1; i<= v1; i++)
{
memset(vis,0,sizeof(vis));
if(dfs(i))
ans++;
}
return ;
}
int main()
{
scanf("%d",&t);
while(t--)
{
ans = Pnum = 0;
memset(link,0,sizeof(link));
memset(gra,0,sizeof(gra));
memset(map,0,sizeof(map));
char s;
scanf("%d %d",&row, &clo);
for( int i = 1; i<= row; i++)
{
getchar();
for( int j = 1; j<= clo; j++)
{
scanf("%c",&s);
if(s == '*')
map[i][j] = ++Pnum;
}
}
v1 = v2 = Pnum;
for( int x = 1; x<= row; x++)
{
for( int y = 1; y<=clo; y++)
{
for( int k = 0; k < 4; k++)
{
int nearx = x + search[k][0];
int neary = y + search[k][1];
if( map[nearx][neary] > 0)
gra[map[x][y]] [map[nearx][neary]] = true;
}
}
}
find();
printf("%d\n",Pnum - ans/2);
}
return 0;
}
#include <string.h>
#include <stdio.h>
using namespace std;
bool vis[500];
int link[500];
bool gra[500][500];
int map[500][500];
int Pnum;
int v1,v2;
int row,clo;
int t,ans;
int search[4][2] = { {0,1}, {0,-1}, {1,0}, {-1,0} };
bool dfs( int x )
{
for( int y = 1; y <= v2; y++)
{
if(gra[x][y] && ! vis[y])
{
vis[y] = true;
if( !link[y] || dfs(link[y]))
{
link[y] = x;
return true;
}
}
}
return false;
}
void find()
{
for( int i = 1; i<= v1; i++)
{
memset(vis,0,sizeof(vis));
if(dfs(i))
ans++;
}
return ;
}
int main()
{
scanf("%d",&t);
while(t--)
{
ans = Pnum = 0;
memset(link,0,sizeof(link));
memset(gra,0,sizeof(gra));
memset(map,0,sizeof(map));
char s;
scanf("%d %d",&row, &clo);
for( int i = 1; i<= row; i++)
{
getchar();
for( int j = 1; j<= clo; j++)
{
scanf("%c",&s);
if(s == '*')
map[i][j] = ++Pnum;
}
}
v1 = v2 = Pnum;
for( int x = 1; x<= row; x++)
{
for( int y = 1; y<=clo; y++)
{
for( int k = 0; k < 4; k++)
{
int nearx = x + search[k][0];
int neary = y + search[k][1];
if( map[nearx][neary] > 0)
gra[map[x][y]] [map[nearx][neary]] = true;
}
}
}
find();
printf("%d\n",Pnum - ans/2);
}
return 0;
}