#include<bits/stdc++.h>
using namespace std;
int n,m,endx,endy;
bool flag[2005][2005];
struct node{
int x;
int y;
int step=0;
};
queue<node> q;
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
bool check(int x,int y)
{
if(x<1||x>n||y<1||y>m)
return false;
return true;
}
void bfs()
{
while(!q.empty())
{
for(int i=0;i<4;i++)
{
int nx=q.front().x+dx[i];
int ny=q.front().y+dy[i];
if(check(nx,ny)&&!flag[nx][ny])
{
//cout<<nx<<' '<<ny<<' '<<q.front().second<<endl;
q.push((node){nx,ny,q.front().step+1});
flag[nx][ny]=1;
if(nx==endx&&ny==endy)
{
cout<<q.front().step;
return;
}
}
}
q.pop();
}
cout<<"No Way!";
return;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
char ch;
cin>>ch;
if(ch=='m')
q.push((node){i,j,0}),flag[i][j]=1;
if(ch=='#')
flag[i][j]=1;
if(ch=='d')
endx=i,endy=j;
}
bfs();
return 0;
}