#include<bits/stdc++.h>
using namespace std;
int N,K;
int vis[1005][1005];
char s[1005][1005];
int nx[4] = {1,0,-1,0};
int ny[4] = {0,1,0,-1};
struct Node{
int x;
int y;
int step;
int magic;
};
bool l=0;
void bfs(){
vis[1][1] = 0;
queue <Node> q;
Node node = {1,1,0,0};
q.push(node);
while(q.size()){
node = q.front();q.pop();
if(node.x==N&&node.y==N){
cout << node.step;
l = 1;
return;
}
for(int i=0;i<4;i++){
int xx = node.x+nx[i];
int yy = node.y+ny[i];
if(s[xx][yy]=='X'&&node.magic==0) continue;
int magic = max(0,node.magic-1);
if(s[xx][yy]=='%') magic = K;
if(xx<1||xx>N||yy<1||yy>N||s[xx][yy]=='#'||vis[xx][yy]>magic) continue;
vis[xx][yy] = magic;
Node node2 = {xx,yy,node.step+1,magic};
q.push(node2);
}
}
}
int main(){
cin >> N >> K;
for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++){
cin >> s[i][j];
}
}
memset(vis,0,sizeof(vis));
bfs();
if(l==0) cout << "-1";
return 0;
}