// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

int to[4][2]={-1,0,

               1,0,

               0,-1,

               0,1};

int vis[1005][1005];

int news[1005][1005];

string s[1005];

int h,w;

int ans;

int x,y;

struct node

{

    int x,y,step;

};

void bfs()

{

    queue<node> q;

    node b;

    for(int i=0;i<h;i++)

    {

        for(int j=0;j<w;j++)

        {

            if(s[i][j]=='#')

            {

                b.step=0;

                b.x=i;

                b.y=j;

                q.push(b);

            }

        }

    }

    while(!q.empty())

    {

        b=q.front();

        q.pop();

        int flag=0;

        for(int i=0;i<4;i++)

        {

            int xx=b.x+to[i][0];

            int yy=b.y+to[i][1];

            if(0<=xx&&xx<h&&0<=yy&&yy<w)

            {

                if(s[xx][yy]=='.')

                {

                    s[xx][yy]='#';

                    node tmp;

                    tmp.x=xx;

                    tmp.y=yy;

                    tmp.step=b.step+1;

                    ans=max(ans,tmp.step);

                    q.push(tmp);

                }

            }

        }

    }

    cout<<ans<<endl;

}



int main()

{

    cin>>h>>w;

    ans=0;

    memset(vis,0,sizeof(vis));

    for(int i=0;i<h;i++) cin>>s[i];

    bfs();

    /*while(1)

    {

        memset(news,0,sizeof(n));

        sum=0;

        for(int i=0;i<h;i++)

        {

            for(int j=0;j<w;j++)

            {

                if(s[i][j]=='#') sum++;

            }

        }

        if(sum==h*w) break;

        for(int i=0;i<h;i++)

        {

            for(int j=0;j<w;j++)

            {

                if(s[i][j]=='#'&&!vis[i][j]&&!news[i][j])

                {

                    vis[i][j]=1;

                    for(int k=0;k<4;k++)

                    {

                        int xx=i+to[k][0];

                        int yy=j+to[k][1];

                        if(0<=xx&&xx<h&&0<=yy&&yy<w)

                        {

                            if(s[xx][yy]=='.')

                            {

                                s[xx][yy]='#';

                                news[xx][yy]=1;

                            }

                        }

                    }

                }

            }

        }

        ans++;

//        for(int i=0;i<h;i++)

//        {

//            for(int j=0;j<w;j++)

//                cout<<s[i][j]<<" ";

//            cout<<endl;

//        }



    }*/

    /*for(int i=0;i<h;i++)

    {

        for(int j=0;j<w;j++)

            cout<<s[i][j]<<" ";

        cout<<endl;

    }

    */

    //cout<<ans<<endl;

    return 0;

}


// Faster C++ solution for the same problem (measured speedup: 5.166066121898303x):
#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

int main(void){

    // Your code here!

int H,W;

cin >> H>>W;

vector<vector<char>> v(H);

vector<pair<int,int>> K;

for ( int i = 0 ; i < H ; i++ )

   v[i].resize(W);

   

   for(int i=0;i< H;i++)

      for(int j=0;j<W;j++){

                  char x;

                  cin >> x;

                  v[i][j]=x;

                  if(x=='#')

                    K.push_back(make_pair(i,j));

      }

      int count=0;

     int prevn=0;

     

      while(1){

          int n=K.size();

          int c=0;

            int OK=0;

          for(int l=prevn;l<n;l++){

              int i=K[l].first;

              int j=K[l].second;

            

              if(i>0)

                 if(v[i-1][j]=='.'){

                     v[i-1][j]='#';

                     K.push_back(make_pair(i-1,j));

                     c++;

                  //   cout << "Jos";

                 }

                     

            if(i<(H-1)) 

                 if(v[i+1][j]=='.'){

                    v[i+1][j]='#';

                    K.push_back(make_pair(i+1,j));

                    c++;

                  //  cout << "Sus";

                 }

               if(j>0)

                 if(v[i][j-1]=='.'){

                     v[i][j-1]='#';

                     K.push_back(make_pair(i,j-1));

                     c++;

                   //  cout << "Stanga";

                 }

                     

            if(j<(W-1)) 

                 if(v[i][j+1]=='.'){

                     v[i][j+1]='#';

                     K.push_back(make_pair(i,j+1));

                     c++;

                  //   cout <<  "Dreapta";

                     

                 }

               //  cout << endl;

                 if(c!=0)

                   OK=1;

                /*   cout << c << endl << endl;

                   for(int f=0;f<H;f++){

                        for(int g=0;g<W;g++)

                           cout << v[f][g];

                           cout << endl;

                   }

                   cout << endl << endl;*/

                 

          }

         // cout << "asddddddddd" << endl << endl << endl << endl << endl << endl;

          if(!OK)

             break;

          count++;

          prevn=n;

          

          

      }

      cout << count;

   

               

}