#include<iostream>
#include<queue>
using namespace std;
char a[205][205],guodu[205][205];
int t[205][205],guodu2[205][205];
int map[4][2]={{1,0},{0,1},{0,-1},{-1,0}};
int x,y,counter;
struct node
{
int x;
int y;
};
node duostart[40000],start,temp,end;
int bfs(queue<struct node>qu,int han,int lie)
{
int i,v;
while(!qu.empty())
{
temp=qu.front();
qu.pop();
for(i=0;i<4;i++)
{
x=temp.x+map[i][0];
y=temp.y+map[i][1];
if(x>=0 && x<lie && y>=0 && y<han && !(a[y][x]=='#'))
{
start.x=x;
start.y=y;
v=t[temp.y][temp.x]+1;
if(a[y][x]=='x')
v++;
if(v<t[start.y][start.x])
{
qu.push(start);
t[start.y][start.x]=v;
}
}
}
}
if(t[end.y][end.x]!=9999)
return t[end.y][end.x];
else
return 0;
}
int main()
{
int han,lie,i,j,k,counter,min,jilu;
while((cin>>han>>lie)!=NULL)
{
counter=0;
min=9999;
for(i=0;i<han;i++)
for(j=0;j<lie;j++)
t[i][j]=9999;
queue<struct node>qu;
for(i=0;i<han;i++)
for(j=0;j<lie;j++)
{
cin>>a[i][j];
if(a[i][j]=='r')
{
duostart[counter].x=j;
duostart[counter].y=i;
a[i][j]='#';
t[i][j]=0;
counter++;
}
if(a[i][j]=='a')
{
end.x=j;
end.y=i;
a[i][j]=';';
}
if(a[i][j]=='.')
a[i][j]=';';
}
for(i=0;i<han;i++)
for(j=0;j<lie;j++)
guodu[i][j]=a[i][j];
for(i=0;i<han;i++)
for(j=0;j<lie;j++)
guodu2[i][j]=t[i][j];
for(i=0;i<counter;i++)
{
qu.push(duostart[i]);
jilu=bfs(qu,han,lie);
if(min>jilu && jilu!=0)
{
min=jilu;
}
for(k=0;k<han;k++)
for(j=0;j<lie;j++)
a[k][j]=guodu[k][j];
for(k=0;k<han;k++)
for(j=0;j<lie;j++)
t[k][j]=guodu2[k][j];
}
if(min!=9999)
cout<<min<<endl;
else
cout<<"Poor ANGEL has to stay in the prison all his life."<<endl;
}
return 0;
}