#include <bits/stdc++.h>
using namespace std;
int main() {
  int H, W;
  cin >> H >> W;
  string S = "";
  for (int i = 0; i < H * W; i++) {
    char c;
    cin >> c;
    S += c;
  }
  set<pair<int, int> > s;
  vector<vector<int> > n(H, vector<int>(W, 0));
  vector<pair<int, int> > vp;
  int64_t min = 1e9;
  for (int i = 0; i < H; i++) {
    for (int j = 0; j < W; j++) {
      if (S.at(i * W + j) == '#') {
        n.at(i).at(j) = -1;
        s.insert(make_pair(i, j));
        continue;
      }
      if (j != 0) {
        if (S.at(i * W + j - 1) == '.') {
          n.at(i).at(j)++;
        }
      }
      if (j != W - 1) {
        if (S.at(i * W + j + 1) == '.') {
          n.at(i).at(j)++;
        }
      }
      if (i != 0) {
        if (S.at((i - 1) * W + j) == '.') {
          n.at(i).at(j)++;
        }
      }
      if (i != H - 1) {
        if (S.at((i + 1) * W + j) == '.') {
          n.at(i).at(j)++;
        }
      }
      if (n.at(i).at(j) <= min) {
        min = n.at(i).at(j);
      }
    }
  }
  for (int i = 0; i < H; i++) {
    for (int j = 0; j < W; j++) {
      if (n.at(i).at(j) == min) {
        vp.push_back(make_pair(i, j));
      }
    }
  }
  priority_queue<int> pq;
  for (int i = 0; i < vp.size(); i++) {
    for (int j = 1; j < vp.size(); j++) {
      pq.push(abs(vp.at(i).first - vp.at(j).first) +
              abs(vp.at(i).second - vp.at(j).second));
    }
  }
  cout << pq.top() + s.size() << endl;
  return 0;
}
