#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
int dx[5]={1,0,-1,0};
int dy[5]={0,1,0,-1};
char a[2001][2001];
bool f[2001][2001];
int n,m,xm,ym,xd,yd,ans;
struct xy
{
int x,y,s;
};
queue<xy>q;
int bfs();
int main()
{
memset(f,false,sizeof(f));
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
if(a[i][j]=='m')
{
xm=i,ym=j;
}
if(a[i][j]=='d')
{
xd=i,yd=j;
}
}
}
if(bfs()!=-1)
{
cout<<ans;
}
else
{
printf("NO Way");
}
return 0;
}
int bfs()
{
xy b;
b.x=xm,b.y=ym,b.s=0;
q.push(b);
while(!q.empty())
{
b=q.front(),q.pop();
for(int i=0;i<4;i++)
{
xy c;
c.x=b.x+dx[i],c.y=b.y+dy[i],c.s=b.s;
if(c.x==xd&&c.y==yd)
{
ans=++c.s;
return ans;
}
if(c.x<1||c.x>n||c.y>m||c.y<1||a[c.x][c.y]=='#'||f[c.x][c.y]) continue;
f[c.x][c.y]=true;
c.s++;
q.push(c);
}
}
return -1;
}