#include<cstdio>
#include<cstdlib>
using namespace std;
long long n,m,gs,dx[4]={0,0,1,-1},dy[4]={1,-1,0,0},head,tail,xx,yy,tt,p;
char ch,a[1005][1005],b[1005][1005];
struct o
{
long long x,y,t;
}opens[1000005];
void bfs(int x,int y)
{
head=1;tail=1;
opens[1].x=x;opens[1].y=y;opens[1].t=0;b[x][y]='1';
while(head<=tail)
{
for(int i=0;i<4;i++)
{
xx=opens[head].x+dx[i];
yy=opens[head].y+dy[i];
if(a[xx][yy]>='A'&&a[xx][yy]<='Z')
{
p=0;
for(int j=1;j<=n;j++)
{
for(int k=1;k<=m;k++)if(a[xx][yy]==a[j][k]&&xx!=j&&yy!=k){xx=j;yy=k;p=1;break;}
if(p==1)break;
}
}
tt=opens[head].t+1;
if(b[xx][yy]=='1'||a[xx][yy]=='1'||xx<1||yy<1||xx>n||yy>m)continue;
if(xx==n&&yy==m){cout<<tt;exit(0);}
b[xx][yy]='1';
tail++;
opens[tail].x=xx;opens[tail].y=yy;opens[tail].t=tt;
}
head++;
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
bfs(1,1);
cout<<"No Solution.";
return 0;
}