#include <iostream>
#include <cstdio>
#include <map>
#define con dfs(store[c].x,store[c].y,1,mars)
#define con1 x+dirx[c]<=co&&x+dirx[c]>=0&&y+diry[c]<=r&&y+diry[c]>=0&&graph[y+diry[c]][x+dirx[c]]==po[len]&&mars[x+dirx[c]][y+diry[c]]==false
using namespace std;
map<int,map<int,char> >graph;
struct node{int x,y;};
int r,co;
const char po[]={'A','L','L','I','Z','Z','W','E','L','L'};
int dirx[]={0,0, 1, 1,1,-1,-1,-1};
int diry[]={1,-1,1,-1,0,1,-1,0};
int dfs(int x,int y,int len,map<int,map<int,bool> > mars){
mars[x][y]=true;
int o(-1);
for (int c(0);c<8;c++){
// cout << x+dirx[c] << " " << y+diry[c] << " " << mars[x+dirx[c]][y+diry[c]] << " " << (con1)<< endl;
if (len==9&&con1)return 1; else if (len==9)continue;
if (con1){o=dfs(x+dirx[c],y+diry[c],len+1,mars);}
}
return o;
}
int main()
{
int t;
cin >> t;
for (;t>0;t--){
graph.clear();
node store[10000];
int current(0);
cin >> r >> co;
for (int c(0);c<r;c++)
{
string a;cin >> a;
for (int c1(0);c1<co;c1++)
{
graph[c][c1]=a[c1];
if (graph[c][c1]=='A'){
store[current].x=c1;store[current].y=c;current++;
}
}
}
int flag(0);map<int,map<int,bool> > mars;
for (int c(0);c<=current;c++){
int result=con;
if (result==1){flag=1;printf("YES\n\n");break;}
}
if (flag!=1)printf("NO\n\n");
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8bWFwPgojZGVmaW5lIGNvbiBkZnMoc3RvcmVbY10ueCxzdG9yZVtjXS55LDEsbWFycykKI2RlZmluZSBjb24xIHgrZGlyeFtjXTw9Y28mJngrZGlyeFtjXT49MCYmeStkaXJ5W2NdPD1yJiZ5K2RpcnlbY10+PTAmJmdyYXBoW3krZGlyeVtjXV1beCtkaXJ4W2NdXT09cG9bbGVuXSYmbWFyc1t4K2RpcnhbY11dW3krZGlyeVtjXV09PWZhbHNlCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cm1hcDxpbnQsbWFwPGludCxjaGFyPiA+Z3JhcGg7CgpzdHJ1Y3Qgbm9kZXtpbnQgeCx5O307CiBpbnQgcixjbzsKY29uc3QgY2hhciBwb1tdPXsnQScsJ0wnLCdMJywnSScsJ1onLCdaJywnVycsJ0UnLCdMJywnTCd9OwppbnQgZGlyeFtdPXswLDAsIDEsIDEsMSwtMSwtMSwtMX07CmludCBkaXJ5W109ezEsLTEsMSwtMSwwLDEsLTEsMH07CmludCBkZnMoaW50IHgsaW50IHksaW50IGxlbixtYXA8aW50LG1hcDxpbnQsYm9vbD4gPiBtYXJzKXsKbWFyc1t4XVt5XT10cnVlOwogICAgaW50IG8oLTEpOwpmb3IgKGludCBjKDApO2M8ODtjKyspewogICAgICAgLy8gY291dCA8PCB4K2RpcnhbY10gPDwgIiAiIDw8IHkrZGlyeVtjXSA8PCAiICIgPDwgbWFyc1t4K2RpcnhbY11dW3krZGlyeVtjXV0gPDwgIiAiIDw8IChjb24xKTw8IGVuZGw7CiAgICAgICAgaWYgKGxlbj09OSYmY29uMSlyZXR1cm4gMTsgZWxzZSBpZiAobGVuPT05KWNvbnRpbnVlOwogICAgaWYgKGNvbjEpe289ZGZzKHgrZGlyeFtjXSx5K2RpcnlbY10sbGVuKzEsbWFycyk7fQp9CgoKcmV0dXJuIG87Cn0KaW50IG1haW4oKQp7CiAgICBpbnQgdDsKIGNpbiA+PiB0OwogICAgZm9yICg7dD4wO3QtLSl7CmdyYXBoLmNsZWFyKCk7CiAgICAgICAgbm9kZSBzdG9yZVsxMDAwMF07CiAgICAgICAgaW50IGN1cnJlbnQoMCk7CiAgICAgICAgY2luID4+IHIgPj4gY287CiAgICAgICAgZm9yIChpbnQgYygwKTtjPHI7YysrKQogICAgICAgIHsKICAgICAgICAgICBzdHJpbmcgYTtjaW4gPj4gYTsKCiAgICAgICAgICAgIGZvciAoaW50IGMxKDApO2MxPGNvO2MxKyspCiAgICAgICAgewoKCiAgICAgICAgIGdyYXBoW2NdW2MxXT1hW2MxXTsKICAgICAgICAgaWYgKGdyYXBoW2NdW2MxXT09J0EnKXsKCiAgICAgICAgICAgICAgICBzdG9yZVtjdXJyZW50XS54PWMxO3N0b3JlW2N1cnJlbnRdLnk9YztjdXJyZW50Kys7CiAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAgaW50IGZsYWcoMCk7bWFwPGludCxtYXA8aW50LGJvb2w+ID4gbWFyczsKICAgICAgICAgZm9yIChpbnQgYygwKTtjPD1jdXJyZW50O2MrKyl7CiAgICAgICAgICAgICAgICBpbnQgcmVzdWx0PWNvbjsKCiAgICAgICAgICAgIGlmIChyZXN1bHQ9PTEpe2ZsYWc9MTtwcmludGYoIllFU1xuXG4iKTticmVhazt9CiAgICAgICAgIH0KaWYgKGZsYWchPTEpcHJpbnRmKCJOT1xuXG4iKTsKfQoKICAgIHJldHVybiAwOwp9Cgo=