#include <bits/stdc++.h>
using namespace std;
long long int n, m;
char s[1001][1001];
bool isok(long long int row, long long int col) {
  return (row >= 0 && row < n && col >= 0 && col < m && s[row][col] != '0' &&
          s[row][col] != '.');
}
void dfs(long long int row, long long int col) {
  long long int r[4] = {0, 0, 1, -1};
  long long int c[4] = {1, -1, 0, 0};
  long long int i;
  s[row][col] = '0';
  for (i = 0; i < 4; i++)
    if (isok(row + r[i], col + c[i])) dfs(row + r[i], col + c[i]);
}
int main() {
  long long int z1 = 0, z2 = 0, p1, p2, i, j;
  cin >> n >> m;
  for (i = 0; i < n; i++) cin >> s[i];
  for (i = 0; i < n; i++) {
    long long int cnt = 0;
    for (j = 1; j < m; j++)
      if (s[i][j] != s[i][j - 1]) cnt++;
    if ((s[i][0] == '.' && cnt > 2) || (s[i][0] == '#' && cnt > 1)) break;
    if (!cnt && s[i][0] == '.') z1++;
  }
  p1 = i;
  for (i = 0; i < m; i++) {
    long long int cnt = 0;
    for (j = 1; j < n; j++)
      if (s[j][i] != s[j - 1][i]) cnt++;
    if ((s[0][i] == '.' && cnt > 2) || (s[0][i] == '#' && cnt > 1)) break;
    if (!cnt && s[0][i] == '.') z2++;
  }
  p2 = i;
  if (p1 < n || p2 < m || (!z1 && z2) || (z1 && !z2)) {
    cout << -1 << endl;
    return 0;
  }
  long long int ans = 0;
  for (i = 0; i < n; i++)
    for (j = 0; j < m; j++) {
      if (s[i][j] == '#') {
        ans++;
        dfs(i, j);
      }
    }
  cout << ans << endl;
  return 0;
}
