#include<bits/stdc++.h>
using namespace std;
int t;
struct node
{
int x,y;
};
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
queue<node>q;
bool v[2005][2005];
int n,m,a[2005][2005],b[2005][2005],u=0,t1=0;
int c(int x,int y)
{
if(x<0||x>n||y<0||y>m)return 0;
if(a[x][y]==2&&b[x][y]==2) return 1;
else return 0;
}
int main()
{
cin>>t;
while(t--)
{
char h;
cin>>n>>m;
u=0,t1=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
v[i][j]=true;
cin>>h;
if(h=='*')a[i][j]=1;
else a[i][j]=2;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]==2)
{
if(a[i-1][j]==1||a[i][j-1]==1||a[i][j+1]==1||a[i+1][j]==1)b[i][j]=1;
else b[i][j]=2;
}
else b[i][j]=2;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(b[i][j]==1&&v[i][j]==true)
{
q.push({i,j});
int s=0;
s=s+c(i-1,j)+c(i,j-1)+c(i,j+1)+c(i+1,j);
while(!q.empty())
{
node d=q.front();
q.pop();
v[d.x][d.y]=false;
for(int i=0;i<4;i++)
{
int nx=d.x+dx[i],ny=d.y+dy[i];
if(nx<0||nx>n||ny<0||ny>m||v[nx][ny]==false||b[nx][ny]==2)continue;
q.push({nx,ny});
s=s+c(nx-1,ny)+c(nx,ny-1)+c(nx,ny+1)+c(nx+1,ny);
}
}
if(s==0) u++;
}
}
}
if(u<=1)cout<<"NO\n";
else cout<<"YES\n";
}
return 0;
}
WA25分