#include<iostream>
#include<cstring>
#include<queue>
#define x first
#define y second
using namespace std;
typedef pair<int,int>PII;
string e[110];
int dist[110][110];
int n,m;
void read(int &x)
{
int f=1;x=0;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s<='9'&&s>='0')x=x*10+(s^48),s=getchar();
x*=f;
}
int bfs(PII start,PII end)
{
queue<PII>q;
memset(dist,-1,sizeof dist);
dist[start.x][start.y]=0;
q.push(start);
int dir[8][2]={2,1,-2,1,-2,-1,2,-1,1,2,-1,2,-1,-2,1,-2};
while(q.size())
{
auto t=q.front();
q.pop();
for(int i=0;i<8;i++)
{
int x=t.x+dir[i][0];
int y=t.y+dir[i][1];
if(x<0||x>=n||y<0||y>=m) continue;
if(e[x][y]=='*') continue;
if(dist[x][y]!=-1) continue;
dist[x][y]=dist[t.x][t.y]+1;
if(make_pair(x,y)==end) return dist[x][y];
q.push({x,y});
}
}
}
int main(void)
{
read(m);read(n);
for(int i=0;i<n;i++) cin>>e[i];
PII start,end;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(e[i][j]=='K') start={i,j};
else if(e[i][j]=='H') end={i,j};
cout<<bfs(start,end)<<endl;
return 0;
}