#include<bits/stdc++.h>
using namespace std;
inline int read()
{
register int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9')
{
x=(x<<3)+(x<<1)+(c^48);
c=getchar();
}
return x*f;
}
struct node
{
int x,y,b;
};
const int maxn=2005;
const int dx[4]={1,0,-1,0};
const int dy[4]={0,1,0,-1};
char mp[maxn][maxn];
bool vis[maxn][maxn];
int n,m,fx,fy;
int main()
{
n=read(),m=read();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>mp[i][j];
if(mp[i][j]=='m') fx=i,fy=j;
}
int sdfj=0;
queue<node> q;
while(!q.empty()) q.pop();
q.push((node){fx,fy,0});
vis[fx][fy]=1;
while(!q.empty())
{
node cur=q.front();
int nx=cur.x,ny=cur.y,bb=cur.b;
q.pop();
if(mp[nx][ny]=='d')
{
cout<<bb;
return 0;
}
for(int i=0;i<4;i++)
{
int xx=nx+dx[i],yy=ny+dy[i];
if(xx<1 || xx>n || yy<1 || yy>m || vis[xx][yy] || mp[xx][yy]=='#') continue;
q.push((node){xx,yy,bb+1});
}
}
cout<<"No Way!";
return 0;
}