#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int dist=INT_MAX;
void bfs(int god_node,vector<vector<int>>&graph,vector<bool>&visited,vector<int>&values){
visited[god_node]=true;
int n=graph.size();
vector<int>lvl(n,-1);
lvl[god_node]=-1;
queue<int>q;
q.push(god_node);
while(!q.empty()){
int node=q.front();
q.pop();
for(auto&child:graph[node]){
if(!visited[child]){
visited[child]=true;
lvl[child]=lvl[node]+1;
q.push(child);
}
}
}
for(int i=0;i<n;i++){
if(values[i]==3){
//cout<<"Distance till moment: "<<lvl[i]<<endl;
dist=min(dist,lvl[i]);
}
}
}
bool valid(int i,int j,int n,int m){
if(i>=0 && i<n && j>=0 && j<m){
return true;
}
return false;
}
void print(vector<int>a){
int n=a.size();
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
cout<<endl;
}
int main(){
int n,m;
cin>>n>>m;
vector<vector<int>>nodes(n,vector<int>(m,0));
vector<vector<int>>grid(n,vector<int>(m));
int cnt=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>grid[i][j];
nodes[i][j]=cnt;
cnt++;
}
}
vector<int>values(n*m,0);
vector<vector<int>>graph(n*m+1);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
int node=nodes[i][j];
int val=grid[i][j];
if(valid(i-1,j,n,m)){
int child=nodes[i-1][j];
graph[node].push_back(child);
}
if(valid(i+1,j,n,m)){
int child=nodes[i+1][j];
graph[node].push_back(child);
}
if(valid(i,j-1,n,m)){
int child=nodes[i][j-1];
graph[node].push_back(child);
}
if(valid(i,j+1,n,m)){
int child=nodes[i][j+1];
graph[node].push_back(child);
}
values[node]=val;
}
}
int god_node=n*m;
int s=graph.size();
for(int i=0;i<s;i++){
if(values[i]==2){
graph[god_node].push_back(i);
}
}
//print(graph[god_node]);
/*for(int i=0;i<n*m;i++){
print(graph[i]);
}
*/
vector<bool>visited(n*m+1,false);
bfs(god_node,graph,visited,values);
cout<<"Minimum distance: "<<dist<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgZGlzdD1JTlRfTUFYOwoKCnZvaWQgYmZzKGludCBnb2Rfbm9kZSx2ZWN0b3I8dmVjdG9yPGludD4+JmdyYXBoLHZlY3Rvcjxib29sPiZ2aXNpdGVkLHZlY3RvcjxpbnQ+JnZhbHVlcyl7CiAgICB2aXNpdGVkW2dvZF9ub2RlXT10cnVlOwogICAgaW50IG49Z3JhcGguc2l6ZSgpOwogICAgdmVjdG9yPGludD5sdmwobiwtMSk7CiAgICBsdmxbZ29kX25vZGVdPS0xOwoKICAgIHF1ZXVlPGludD5xOwogICAgcS5wdXNoKGdvZF9ub2RlKTsKCiAgICB3aGlsZSghcS5lbXB0eSgpKXsKICAgICAgICBpbnQgbm9kZT1xLmZyb250KCk7CiAgICAgICAgcS5wb3AoKTsKCiAgICAgICAgZm9yKGF1dG8mY2hpbGQ6Z3JhcGhbbm9kZV0pewogICAgICAgICAgICBpZighdmlzaXRlZFtjaGlsZF0pewogICAgICAgICAgICAgICAgdmlzaXRlZFtjaGlsZF09dHJ1ZTsKICAgICAgICAgICAgICAgIGx2bFtjaGlsZF09bHZsW25vZGVdKzE7CiAgICAgICAgICAgICAgICBxLnB1c2goY2hpbGQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZvcihpbnQgaT0wO2k8bjtpKyspewogICAgICAgIGlmKHZhbHVlc1tpXT09Myl7CiAgICAgICAgICAgIC8vY291dDw8IkRpc3RhbmNlIHRpbGwgbW9tZW50OiAiPDxsdmxbaV08PGVuZGw7CiAgICAgICAgICAgIGRpc3Q9bWluKGRpc3QsbHZsW2ldKTsKICAgICAgICB9CiAgICB9CgoKfQoKYm9vbCB2YWxpZChpbnQgaSxpbnQgaixpbnQgbixpbnQgbSl7CiAgICBpZihpPj0wICYmIGk8biAmJiBqPj0wICYmIGo8bSl7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwp9Cgp2b2lkIHByaW50KHZlY3RvcjxpbnQ+YSl7CiAgICBpbnQgbj1hLnNpemUoKTsKICAgIGZvcihpbnQgaT0wO2k8bjtpKyspewogICAgICAgIGNvdXQ8PGFbaV08PCIgIjsKICAgIH0KICAgIGNvdXQ8PGVuZGw7Cn0KCmludCBtYWluKCl7CiAgICBpbnQgbixtOwogICAgY2luPj5uPj5tOwogICAgdmVjdG9yPHZlY3RvcjxpbnQ+Pm5vZGVzKG4sdmVjdG9yPGludD4obSwwKSk7CiAgICB2ZWN0b3I8dmVjdG9yPGludD4+Z3JpZChuLHZlY3RvcjxpbnQ+KG0pKTsKICAgIGludCBjbnQ9MDsKICAgIGZvcihpbnQgaT0wO2k8bjtpKyspewogICAgICAgIGZvcihpbnQgaj0wO2o8bTtqKyspewogICAgICAgICAgICBjaW4+PmdyaWRbaV1bal07CiAgICAgICAgICAgIG5vZGVzW2ldW2pdPWNudDsKICAgICAgICAgICAgY250Kys7CiAgICAgICAgfQogICAgfQoKICAgIHZlY3RvcjxpbnQ+dmFsdWVzKG4qbSwwKTsKICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj5ncmFwaChuKm0rMSk7CgogICAgZm9yKGludCBpPTA7aTxuO2krKyl7CiAgICAgICAgZm9yKGludCBqPTA7ajxtO2orKyl7CiAgICAgICAgICAgIGludCBub2RlPW5vZGVzW2ldW2pdOwogICAgICAgICAgICBpbnQgdmFsPWdyaWRbaV1bal07CgogICAgICAgICAgICBpZih2YWxpZChpLTEsaixuLG0pKXsKICAgICAgICAgICAgICAgIGludCBjaGlsZD1ub2Rlc1tpLTFdW2pdOwogICAgICAgICAgICAgICAgZ3JhcGhbbm9kZV0ucHVzaF9iYWNrKGNoaWxkKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYodmFsaWQoaSsxLGosbixtKSl7CiAgICAgICAgICAgICAgICBpbnQgY2hpbGQ9bm9kZXNbaSsxXVtqXTsKICAgICAgICAgICAgICAgIGdyYXBoW25vZGVdLnB1c2hfYmFjayhjaGlsZCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmKHZhbGlkKGksai0xLG4sbSkpewogICAgICAgICAgICAgICAgaW50IGNoaWxkPW5vZGVzW2ldW2otMV07CiAgICAgICAgICAgICAgICBncmFwaFtub2RlXS5wdXNoX2JhY2soY2hpbGQpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZih2YWxpZChpLGorMSxuLG0pKXsKICAgICAgICAgICAgICAgIGludCBjaGlsZD1ub2Rlc1tpXVtqKzFdOwogICAgICAgICAgICAgICAgZ3JhcGhbbm9kZV0ucHVzaF9iYWNrKGNoaWxkKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFsdWVzW25vZGVdPXZhbDsKICAgICAgICB9CiAgICB9CgogICAgaW50IGdvZF9ub2RlPW4qbTsKICAgIAogICAgaW50IHM9Z3JhcGguc2l6ZSgpOwogICAgZm9yKGludCBpPTA7aTxzO2krKyl7CiAgICAgICAgaWYodmFsdWVzW2ldPT0yKXsKICAgICAgICAgICAgZ3JhcGhbZ29kX25vZGVdLnB1c2hfYmFjayhpKTsKICAgICAgICB9CiAgICB9CgogICAgLy9wcmludChncmFwaFtnb2Rfbm9kZV0pOwoKICAgIC8qZm9yKGludCBpPTA7aTxuKm07aSsrKXsKICAgICAgICBwcmludChncmFwaFtpXSk7CiAgICB9CgogICAgKi8KCiAgICB2ZWN0b3I8Ym9vbD52aXNpdGVkKG4qbSsxLGZhbHNlKTsKICAgIGJmcyhnb2Rfbm9kZSxncmFwaCx2aXNpdGVkLHZhbHVlcyk7CiAgICBjb3V0PDwiTWluaW11bSBkaXN0YW5jZTogIjw8ZGlzdDw8ZW5kbDsKCiAgICByZXR1cm4gMDsKfQ==