#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(); }