#include <bits/stdc++.h>
#define fi first
#define se second
#define ll long long
#define N int(1e6)
using namespace std;
ll r, c;
ll dx[4]= {1, -1, 0, 0};
ll dy[4]= {0, 0, 1, -1};
char a[55][55];
ll tg[55][55],kc[55][55];
bool vis[55][55];
bool bien(ll x,ll y)
{
    return (x<=r && y<=c && x>=1 && y>=1);
}
bool ok;
void bfs(ll x, ll y)
{
    memset(vis,0,sizeof vis);
    queue<pair<ll, ll>>q;
    q.push({x, y});
    vis[x][y]=1;
    tg[x][y]=0;
    //cout<<x<<" "<<y<<'\n';
    while(!q.empty())
    {
        auto top=q.front();
        q.pop();
        for(int i=0; i<=3; i++)
        {
            ll nx=top.fi+dx[i];
            ll ny=top.se+dy[i];
            if(!vis[nx][ny] && a[nx][ny]=='.' && bien(nx,ny))
            {
                //cout<<nx<<" "<<ny<<'\n';
                tg[nx][ny]=min(tg[nx][ny],tg[top.fi][top.se]+1);
                vis[nx][ny]=1;
                q.push({nx,ny});
            }
        }
    }
}
void bfs1(ll x,ll y)
{
    memset(vis,0,sizeof vis);
    queue<pair<ll, ll>>q;
    q.push({x, y});
    vis[x][y]=1;
    kc[x][y]=0;
    //cout<<x<<" "<<y<<'\n';
    while(!q.empty())
    {
        auto top=q.front();
        q.pop();
        for(int i=0; i<=3; i++)
        {
            ll nx=top.fi+dx[i];
            ll ny=top.se+dy[i];
            if(a[nx][ny]=='D' && (kc[top.fi][top.se]+1)<tg[nx][ny])
            {
                ok=1;
                //cout<<"  "<<nx<< " "<<ny<<'\n';
                kc[nx][ny]=kc[top.fi][top.se]+1;
                cout<<kc[nx][ny];
                return ;
            }
            if(!vis[nx][ny] && a[nx][ny]=='.' && bien(nx,ny) && (kc[top.fi][top.se]+1)<tg[nx][ny])
            {
                kc[nx][ny]=min(kc[nx][ny],kc[top.fi][top.se]+1);
                //cout<<nx<<" "<<ny<<" "<<kc[nx][ny]<<'\n';
                vis[nx][ny]=1;
                q.push({nx,ny});
            }
        }
    }
}
pair<ll,ll>bd;
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin>>r>>c;
    for(int i=1; i<=r; i++)
        for(int j=1; j<=c; j++)
        {
            tg[i][j]=LLONG_MAX;
            kc[i][j]=LLONG_MAX;
            cin>>a[i][j];
            if(a[i][j]=='S') bd={i,j};
        }
    //cout<<bd.fi<<" "<<bd.se<<'\n'<<kt.fi<<" "<<kt.se;
    for(int i=1; i<=r; i++)
        for(int j=1; j<=c; j++)
            if(a[i][j]=='*') bfs(i, j);

//    for(int i=1; i<=r; i++)
//    {
//        for(int j=1; j<=c; j++)
//        {
//            //cout<<a[i][j]<<" ";
//            if(a[i][j]=='*') cout<<0<<" ";
//            else if(a[i][j]=='.') cout<<tg[i][j]<<" ";
//            else cout<<a[i][j]<<" ";
//        }
//        cout<<'\n';
//    }
    bfs1(bd.fi,bd.se);
    if(ok==0) cout<<"KAKTUS";

    return 0;
}
