#include <bits/stdc++.h>
#define ll long long
#define N int(500)
using namespace std;
struct dl
{
    ll u, v, val;
};
bool operator>(const dl& a, const dl& b)
{
    return a.val > b.val;
}
ll n, m;
vector<dl>adj[N+10][N+10];
char a[N+10][N+10];
ll d[N+10][N+10];
void bfs()
{
    for(int i=0; i<=n; i++)
        for(int j=0; j<=m; j++) d[i][j]=1e9;

    d[0][0]=0;
    priority_queue<dl, vector<dl>, greater<dl>>q;
    q.push({0, 0, 0});
    while(!q.empty())
    {
        dl top=q.top();
        q.pop();
        ll u=top.u;
        ll v=top.v;
        ll kc=top.val;
        if(kc>d[u][v]) continue;
        for(auto it:adj[u][v])
        {
            ll u1=it.u;
            ll v1=it.v;
            ll w=it.val;
            if(d[u1][v1]>(d[u][v]+w))
            {
                d[u1][v1]=d[u][v]+w;
                q.push({u1, v1, d[u1][v1]});

            }
        }
    }
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    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]=='\\')
            {
                adj[i-1][j-1].push_back({i, j, 0});
                adj[i][j].push_back({i-1, j-1, 0});
                adj[i-1][j].push_back({i, j-1, 1});
                adj[i][j-1].push_back({i-1, j, 1});
            }
            else
            {
                adj[i-1][j-1].push_back({i, j, 1});
                adj[i][j].push_back({i-1, j-1, 1});
                adj[i-1][j].push_back({i, j-1, 0});
                adj[i][j-1].push_back({i-1, j, 0});
            }
        }
    bfs();
    if (d[n][m] == 1e9) cout << "NO SOLUTION";
    else cout << d[n][m];

    return 0;
}
