#include <bits/stdc++.h>
using namespace std;
const int maxn=1e2+1;
char a[maxn][maxn];
int r[maxn],c[maxn];//r是行,c是列
int T;
void solve()
{
int n,m,flag,flag1,flag2,left,right,up,down;
flag2=0;
flag1=0;
left=0;
right=0;
up=0;
down=0;
flag=0;
memset(r,0,sizeof(r));
memset(c,0,sizeof(c));
cin>>n>>m;
for(int i=1; i<=n; ++i)
{
cin>>a[i]+1;
for(int j=1; j<=m; ++j)
{
r[i]+=(a[i][j]=='A');
c[j]+=(a[i][j]=='A');
if(i==1)
up+=(a[i][j]=='A');
if(i==n)
down+=(a[i][j]=='A');
if(j==1)
left+=(a[i][j]=='A');
if(j==m)
right+=(a[i][j]=='A');
if(a[i][j]=='A')
flag=1;
if(a[i][j]=='P')
flag1=1;
}
}
if(!flag1)
{
cout<<"0"<<endl;
return ;
}
if(!flag)
{
cout<<"MORTAL"<<endl;
return ;
}
if(left==n||right==n||up==m||down==m)
{
cout<<"1"<<endl;
return ;
}
for(int i=1; i<=n; ++i)
{
if(r[i]==m)
{
flag2=1;
break;
}
}
for(int i=1; i<=m; ++i)
{
if(c[i]==n)
{
flag2=1;
break;
}
}
if(a[1][1]=='A'||a[1][m]=='A'||a[n][1]=='A'||a[n][m]=='A'||flag2)
{
cout<<"2"<<endl;
return ;
}
if(left>0||right>0||up>0||down>0)
{
cout<<"3"<<endl;
return ;
}
cout<<"4"<<endl;
}
int main()
{
cin>>T;
while(T--)
solve();
}