#include<bits/stdc++.h>
#define PB push_back
#define F first
#define S second
using namespace std;
bool tab[2002][2002],odw[2002][2002];
char x;
int sr,n,m;
void dfs(pair<int,int>i){
// if(sr==3)cout<<i<<" "<<j<<endl;
odw[i.F][i.S]=1;
if(tab[i.F-1][i.S]==0&&odw[i.F-1][i.S]==0) dfs({i.F-1,i.S});
if(tab[i.F+1][i.S]==0&&odw[i.F+1][i.S]==0) dfs({i.F+1,i.S});
if(tab[i.F][i.S-1]==0&&odw[i.F][i.S-1]==0) dfs({i.F,i.S-1});
if(tab[i.F][i.S+1]==0&&odw[i.F][i.S+1]==0&&i.S<n-sr) dfs({i.F,i.S+1});
}
bool odp(){
for(int i=0;i<=n;i++){
for(int j=0;j<=m;j++) odw[j][i]=0;
}
for(int i=1;i<=n-sr;i++){
if(odw[1][i]==0&&tab[1][i]==0) dfs({1,i});
}
for(int i=1;i<=n;i++){
if(odw[m][i]==1) return 0;
}
return 1;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cin>>n>>m;
for(int i=0;i<=n+1;i++){
for(int j=0;j<=m+1;j++){
if(i==0||j==0||j==m+1||i==n+1) tab[j][i]=1;
else{
cin>>x;
if(x=='.') tab[j][i]=0;
else tab[j][i]=1;
}
}
}
int p=-1,k=2001;
while(k-p>1){
sr=(p+k)/2;
if(odp()==0) p=sr;
else k=sr;
}
if(p==-1) {
cout<<"NIE";
return 0;
}
cout<<p;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBQQiBwdXNoX2JhY2sKI2RlZmluZSBGIGZpcnN0IAojZGVmaW5lIFMgc2Vjb25kCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmJvb2wgdGFiWzIwMDJdWzIwMDJdLG9kd1syMDAyXVsyMDAyXTsKY2hhciB4OwppbnQgc3IsbixtOwoKdm9pZCBkZnMocGFpcjxpbnQsaW50PmkpewovLwlpZihzcj09Myljb3V0PDxpPDwiICI8PGo8PGVuZGw7CglvZHdbaS5GXVtpLlNdPTE7CglpZih0YWJbaS5GLTFdW2kuU109PTAmJm9kd1tpLkYtMV1baS5TXT09MCkgZGZzKHtpLkYtMSxpLlN9KTsKCWlmKHRhYltpLkYrMV1baS5TXT09MCYmb2R3W2kuRisxXVtpLlNdPT0wKSBkZnMoe2kuRisxLGkuU30pOwoJaWYodGFiW2kuRl1baS5TLTFdPT0wJiZvZHdbaS5GXVtpLlMtMV09PTApIGRmcyh7aS5GLGkuUy0xfSk7CglpZih0YWJbaS5GXVtpLlMrMV09PTAmJm9kd1tpLkZdW2kuUysxXT09MCYmaS5TPG4tc3IpIGRmcyh7aS5GLGkuUysxfSk7Cn0KCmJvb2wgb2RwKCl7Cglmb3IoaW50IGk9MDtpPD1uO2krKyl7CgkJZm9yKGludCBqPTA7ajw9bTtqKyspIG9kd1tqXVtpXT0wOwoJfQoJZm9yKGludCBpPTE7aTw9bi1zcjtpKyspewoJCWlmKG9kd1sxXVtpXT09MCYmdGFiWzFdW2ldPT0wKSBkZnMoezEsaX0pOwoJfQoJZm9yKGludCBpPTE7aTw9bjtpKyspewoJCWlmKG9kd1ttXVtpXT09MSkgcmV0dXJuIDA7Cgl9CglyZXR1cm4gMTsKfQoKaW50IG1haW4oKXsKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CgljaW4udGllKDApOwoJY2luPj5uPj5tOwoJZm9yKGludCBpPTA7aTw9bisxO2krKyl7CgkJZm9yKGludCBqPTA7ajw9bSsxO2orKyl7CgkJCWlmKGk9PTB8fGo9PTB8fGo9PW0rMXx8aT09bisxKSB0YWJbal1baV09MTsKCQkJZWxzZXsKCQkJCWNpbj4+eDsKCQkJCWlmKHg9PScuJykgdGFiW2pdW2ldPTA7CgkJCQllbHNlIHRhYltqXVtpXT0xOwoJCQl9CgkJfQoJfQoJaW50IHA9LTEsaz0yMDAxOwoJd2hpbGUoay1wPjEpewoJCXNyPShwK2spLzI7CgkJaWYob2RwKCk9PTApIHA9c3I7CgkJZWxzZSBrPXNyOwoJfQoJaWYocD09LTEpIHsKCQljb3V0PDwiTklFIjsKCQlyZXR1cm4gMDsKCX0KCWNvdXQ8PHA7Cn0K