#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000 + 50;
int n, m;
char world[maxn][maxn] = {0};
int X[maxn] = {0};
int Y[maxn] = {0};
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      cin >> world[i][j];
    }
  }
  for (int i = 1; i <= max(n, m); i++) {
    X[i] = Y[i] = -1;
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      if (world[i][j] == 'X') {
        X[i] = j;
        Y[j] = i;
      }
    }
  }
  long long sum = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = i; j <= n; j++) {
      sum += (long long)(m - (X[i] > 0)) * (long long)(m - (X[j] > 0)) *
             (j - i) * 2;
    }
  }
  for (int i = 1; i <= m; i++) {
    for (int j = i; j <= m; j++) {
      sum += (long long)(n - (Y[i] > 0)) * (long long)(n - (Y[j] > 0)) *
             (j - i) * 2;
    }
  }
  for (int i = 1; i <= n; i++) {
    if (X[i] != -1) {
      long long A = X[i] - 1;
      long long B = m - X[i];
      sum += A * B * 4;
      for (int j = i + 1; j <= n; j++) {
        if (X[j - 1] > X[j] || X[j] == -1) break;
        sum += A * (long long)(m - X[j]) * 4;
      }
      for (int j = i - 1; j >= 1; j--) {
        if (X[j + 1] > X[j] || X[j] == -1) break;
        sum += A * (long long)(m - X[j]) * 4;
      }
    }
  }
  for (int i = 1; i <= m; i++) {
    if (Y[i] != -1) {
      long long A = Y[i] - 1;
      long long B = n - Y[i];
      sum += A * B * 4;
      for (int j = i + 1; j <= m; j++) {
        if (Y[j - 1] > Y[j] || Y[j] == -1) break;
        sum += A * (long long)(n - Y[j]) * 4;
      }
      for (int j = i - 1; j >= 1; j--) {
        if (Y[j + 1] > Y[j] || Y[j] == -1) break;
        sum += A * (long long)(n - Y[j]) * 4;
      }
    }
  }
  long double ans = 0;
  for (int i = 1; i <= n; i++) {
    ans += (m - (X[i] > 0));
  }
  ans = ans * ans;
  ans = sum / ans;
  cout.setf(ios::fixed);
  cout.precision(10);
  cout << ans << endl;
  return 0;
}
