#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>
#define MAX 207
using namespace std;
int n,m,sx,sy;
int mp[MAX][MAX];
int mark[MAX][MAX];
char s[MAX];
int ans;
struct Node
{
int x,y,t;
}tmp,st;
int dx[] = { 0 , 1 , -1 , 0 , 0 };
int dy[] = { 0 , 0 , 0 , -1 , 1 };
void bfs ( )
{
queue<Node> q;
st.x = sx , st.y = sy , st.t = 0;
q.push ( st );
mark[sx][sy] = 1;
while ( !q.empty())
{
tmp = q.front();
// cout << tmp.x << " " << tmp.y << endl;
q.pop ( );
if ( mp[tmp.x][tmp.y] == 3 )
{
if ( ans == -1 ) ans = tmp.t-2;
else ans = min ( ans , tmp.t-2 );
}
for ( int i = 1 ; i <= 4 ; i++ )
{
st.x = tmp.x + dx[i] , st.y = tmp.y + dy[i];
if ( !mp[st.x][st.y] ) continue;
st.t = tmp.t + mp[st.x][st.y];
if ( mark[st.x][st.y] <= st.t ) continue;
mark[st.x][st.y] = st.t;
q.push ( st );
}
}
}
int main ( )
{
while ( ~scanf ( "%d%d" , &n , &m ) )
{
ans = -1;
memset ( mp , 0 , sizeof ( mp ) );
memset ( mark , 0x3f , sizeof ( mark ) );
for ( int i = 1 ; i <= n ; i++ )
{
scanf ( "%s" , s+1 );
for ( int j = 1 ; j <= m ; j++ )
if ( s[j] == '.' ) mp[i][j] = 1;
else if ( s[j] == 'x' ) mp[i][j] = 2;
else if ( s[j] == 'a' ) mp[i][j] = 3;
else if ( s[j] == 'r' ) mp[i][j] = 1, sx = i , sy = j;
}
bfs ( );
if ( ans == -1 )
puts ( "Poor ANGEL has to stay in the prison all his life." );
else printf ( "%d\n" , ans );
}
}