#include <iostream>
#include <stdio.h>
#include <string>
#include <string.h>
#include <algorithm>
#include <stdlib.h>
#include <math.h>
#include <queue>
using namespace std;
const int maxn = 205;
const int inf = 0xfffffff;
struct node{
int x,y;
int step;
int time;
void set(int xx,int yy,int s,int t){
x = xx; y = yy; step = s; time = t;
}
};
int n,m;
int sx,sy,ax,ay;
int dir[4][2] = {1,0,0,1,-1,0,0,-1};
char grid[maxn][maxn];
int mintime[maxn][maxn];
int cango(int x,int y){
return (x>=1&&x<=n&&y>=1&&y<=m);
}
void init(){
for(int i = 1;i <= n;i++)
for(int j = 1;j <= m;j++)
mintime[i][j] = inf;
}
void bfs(node start){
node now,next;
queue<node>que;
que.push(start);
while(!que.empty()){
now = que.front();
que.pop();
for(int i = 0;i < 4;i++){
int xx = now.x + dir[i][0];
int yy = now.y + dir[i][1];
if(cango(xx, yy)&&grid[xx][yy] != '#'){
next.set(xx,yy,now.step+1,now.time+1);
if(grid[xx][yy] == 'x')
next.time++;
if(next.time<mintime[xx][yy]){
mintime[xx][yy] = next.time;
que.push(next);
}
}
}
}
}
int main(){
while(~scanf("%d%d",&n,&m)){
for(int i = 1;i <= n;i++)
scanf("%s",grid[i]+1);
for(int i = 1;i <= n;i++)
for(int j = 1;j <= m;j++){
if(grid[i][j] == 'a'){
ax = i;
ay = j;
}
if(grid[i][j] == 'r'){
sx = i;
sy = j;
}
}
node st;
init();
st.set(sx,sy,0,0);
bfs(st);
/*for(int i = 1;i <= n;i++){
for(int j = 1;j <= m;j++)
printf("%10d ",mintime[i][j]);
printf("\n");
}*/
if(mintime[ax][ay] != inf)
printf("%d\n",mintime[ax][ay]);
else
printf("Poor ANGEL has to stay in the prison all his life.\n");
}
return 0;
}