#include <bits/stdc++.h>
using namespace std;
char f[50][50];
bool used[50][50];
int dx[4] = {-1, 0, 0, 1};
int dy[4] = {0, 1, -1, 0};
int h, w;
bool check(int x, int y) {
  if (x >= 0 && x < h && y >= 0 && y < w && f[x][y] == '#' && !used[x][y])
    return true;
  else
    return false;
}
void bfs(int x, int y) {
  queue<pair<int, int> > que;
  que.push(pair<int, int>(x, y));
  used[x][y] = true;
  while (!que.empty()) {
    pair<int, int> p = que.front();
    que.pop();
    for (int i = 0; i < 4; i++) {
      int nx = p.first + dx[i];
      int ny = p.second + dy[i];
      if (check(nx, ny)) {
        used[nx][ny] = true;
        que.push(pair<int, int>(nx, ny));
      }
    }
  }
}
bool solve(int x, int y) {
  memset(used, false, sizeof(used));
  int i, j;
  int cnt = 0;
  f[x][y] = '.';
  for (i = 0; i < h; i++) {
    for (j = 0; j < w; j++) {
      if (f[i][j] == '#' && !used[i][j]) {
        cnt++;
        bfs(i, j);
      }
    }
  }
  f[x][y] = '#';
  if (cnt >= 2)
    return true;
  else
    return false;
}
int main() {
  int i, j;
  scanf("%d %d", &h, &w);
  int cnt = 0;
  for (i = 0; i < h; i++) {
    for (j = 0; j < w; j++) {
      scanf(" %c", &f[i][j]);
      if (f[i][j] == '#') cnt++;
    }
  }
  if (cnt <= 2) {
    printf("-1\n");
    return 0;
  }
  bool pos = false;
  for (i = 0; i < h; i++) {
    for (j = 0; j < w; j++) {
      if (f[i][j] == '#') pos |= solve(i, j);
    }
  }
  if (pos)
    printf("1\n");
  else
    printf("2\n");
  return 0;
}
