#include <bits/stdc++.h>
using namespace std;
int used[128][128];
int dfs(char str[128][128], int n, int m, int N, int M) {
  int ret;
  ret = 1;
  used[n][m] = 1;
  if ((0 < n) && (str[n - 1][m] == '#') && !used[n - 1][m])
    ret += dfs(str, n - 1, m, N, M);
  if ((n < (N - 1)) && (str[n + 1][m] == '#') && !used[n + 1][m])
    ret += dfs(str, n + 1, m, N, M);
  if ((0 < m) && (str[n][m - 1] == '#') && !used[n][m - 1])
    ret += dfs(str, n, m - 1, N, M);
  if ((m < (M - 1)) && (str[n][m + 1] == '#') && !used[n][m + 1])
    ret += dfs(str, n, m + 1, N, M);
  return ret;
}
int go(char str[128][128], int N, int M) {
  int i, j;
  for (i = 0; i < N; i++) {
    for (j = 0; j < M; j++) {
      if (str[i][j] == '#') {
        memset(used, 0, sizeof(used));
        return dfs(str, i, j, N, M);
      }
    }
  }
  return 0;
}
int main(void) {
  int N, M;
  int i, j, k;
  char str[128][128];
  int cnt, a, b;
  scanf("%d %d\n", &N, &M);
  for (i = 0; i < N; i++) {
    fgets(str[i], 128, stdin);
  }
  cnt = 0;
  for (i = 0; i < N; i++) {
    for (j = 0; j < M; j++) {
      if (str[i][j] == '#') cnt++;
    }
  }
  if (cnt <= 2) {
    printf("%d\n", -1);
    return 0;
  } else if (cnt == 3) {
    printf("%d\n", 1);
    return 0;
  } else {
    for (i = 0; i < N; i++) {
      for (j = 0; j < M; j++) {
        if (str[i][j] == '.') continue;
        str[i][j] = '.';
        if (go(str, N, M) != (cnt - 1)) {
          for (a = 0; a < N; a++) {
            for (b = 0; b < M; b++) {
            }
          }
          printf("%d\n", 1);
          return 0;
        }
        str[i][j] = '#';
      }
    }
  }
  printf("%d\n", 2);
  return 0;
}
