#include<iostream>
#include<stdio.h>
using namespace std;
const int INF=1000005;
string s[1005],st="1234";
int dp[1005][1005]={0};
int n,m,ans=0;

int dfs(int i,int j,int l)
{if(dp[i][j]!=0) return dp[i][j];
 dp[i][j]=INF;
 l=(l+1)%4;
 int tmp=0;
 if (i>0&&s[i-1][j]==st[l])  tmp=max(tmp,dfs(i-1,j,l));
 if (i<n-1&&s[i+1][j]==st[l])tmp=max(tmp,dfs(i+1,j,l));
 if (j>0&&s[i][j-1]==st[l])  tmp=max(tmp,dfs(i,j-1,l));
 if (j<m-1&&s[i][j+1]==st[l])tmp=max(tmp,dfs(i,j+1,l));
return dp[i][j]=min(INF,tmp+1);
}
int main()
{
    freopen(".20.in","r",stdin);
freopen(".20.out","w",stdout);

cin>>n>>m;
for(int i=0;i<n;i++) cin>>s[i];
for(int i=0; ans!=INF&&i<n; i++)
   for(int j=0; ans!=INF&&j<m;j++)
     if(s[i][j]=='1') ans=max(ans,dfs(i,j,0));
if(ans==INF) cout<<"INF";
 else if(ans<4) cout<<"impossible";
    else  cout<<ans/4;
return 0;
}
