#include <bits/stdc++.h>
using ll = long long;
using namespace std;
template <class T>
T chmin(T& a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
T chmax(T& a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
int h, w;
vector<string> s;
void input() {
  cin >> h >> w;
  s.resize(h);
  for (ll i = 0, i_len = (h); i < i_len; ++i) {
    cin >> s[i];
  };
}
void src() {
  queue<pair<int, int>> start;
  queue<pair<int, int>> now;
  queue<pair<int, int>> next;
  for (ll i = 0, i_len = (h); i < i_len; ++i) {
    for (ll j = 0, j_len = (w); j < j_len; ++j) {
      if (s[i][j] == '.') {
        start.push({i, j});
      }
    }
  }
  int movemax = 0;
  while (start.size() > 0) {
    vector<bool> memo[h];
    for (ll i = 0, i_len = (h); i < i_len; ++i) memo[i].resize(w, false);
    for (ll i = 0, i_len = (h); i < i_len; ++i) {
      for (ll j = 0, j_len = (w); j < j_len; ++j) {
        if (s[i][j] == '#') {
          memo[i][j] = true;
        }
      }
    }
    next.push(start.front());
    start.pop();
    int move = -1;
    while (next.size() > 0) {
      move++;
      for (ll i = 0, i_len = (next.size()); i < i_len; ++i) {
        now.push(next.front());
        next.pop();
      }
      while (now.size() > 0) {
        pair<int, int> np = now.front();
        now.pop();
        if (np.first + 1 < h) {
          if (memo[np.first + 1][np.second] == false) {
            next.push({np.first + 1, np.second});
            memo[np.first + 1][np.second] = true;
          }
        }
        if (0 <= np.first - 1) {
          if (memo[np.first - 1][np.second] == false) {
            next.push({np.first - 1, np.second});
            memo[np.first - 1][np.second] = true;
          }
        }
        if (np.second + 1 < w) {
          if (memo[np.first][np.second + 1] == false) {
            next.push({np.first, np.second + 1});
            memo[np.first][np.second + 1] = true;
          }
        }
        if (0 <= np.second - 1) {
          if (memo[np.first][np.second - 1] == false) {
            next.push({np.first, np.second - 1});
            memo[np.first][np.second - 1] = true;
          }
        }
      }
    }
    chmax(movemax, move);
  }
  cout << movemax;
}
int main(int argc, char* argv[]) {
  ios::sync_with_stdio(false);
  input();
  src();
}
