#include <bits/stdc++.h>
using namespace std;
const int N=1e3+5;
int n,k;
char mp[N][N];
bool fl[N][N];
bool fk[N][N];
int dx[]= {1,0,-1,0};
int dy[]= {0,1,0,-1};
struct node {
int x,y,k,cnt;
node() {};
node(int a,int b,int c,int d):x(a),y(b),k(c),cnt(d) {};
} e,nx;
queue<node> q;
void bfs() {
q.emplace(1,1,0,0);
fl[1][1]=true;
fk[1][1]=true;
while(!q.empty()) {
e=q.front();
q.pop();
if(e.x==n&&e.y==n) {
cout<<e.cnt;
return;
}
e.cnt++;
if(e.k)e.k-=1;
for(int i=0; i<4; i++) {
nx=e;
nx.x+=dx[i];
nx.y+=dy[i];
if(nx.x>=1&&nx.x<=n&&nx.y>=1&&nx.y<=n&&mp[nx.x][nx.y]!='#') {
if(mp[nx.x][nx.y]=='%')nx.k=k;
if(nx.k&&!fk[nx.x][nx.y]) {
fk[nx.x][nx.y]=true;
q.emplace(nx);
continue;
}
if(mp[nx.x][nx.y]!='X'&&!fl[nx.x][nx.y]) {
fl[nx.x][nx.y]=true;
q.emplace(nx);
}
}
}
}
cout<<-1;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>k;
k+=1;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
cin>>mp[i][j];
bfs();
return 0;
}