#include <bits/stdc++.h>
const int N = 1005;
int n, m;
char map[N][N];
int locx[N], locy[N], area[N], sumx[N][2], sumy[N][2];
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) {
    scanf("%s", map[i] + 1);
    for (int j = 1; j <= m; j++)
      if (map[i][j] == 'X') {
        locx[i] = j;
        locy[j] = i;
      }
  }
  for (int j = 1; j <= m; j++)
    if (locy[j])
      area[j] =
          (j == 1 || locy[j - 1] < locy[j] ? 0 : area[j - 1]) + n - locy[j];
  for (int j = 1; j <= m; j++) sumy[j][1] += area[j], area[j] = 0;
  for (int j = m; j >= 1; j--)
    if (locy[j])
      area[j] =
          (j == m || locy[j + 1] < locy[j] ? 0 : area[j + 1]) + n - locy[j];
  for (int j = 1; j <= m; j++) sumy[j][1] += area[j], area[j] = 0;
  for (int j = 1; j <= m; j++)
    if (locy[j])
      area[j] =
          (j == 1 || locy[j - 1] > locy[j] ? 0 : area[j - 1]) + locy[j] - 1;
  for (int j = 1; j <= m; j++) sumy[j][0] += area[j], area[j] = 0;
  for (int j = m; j >= 1; j--)
    if (locy[j])
      area[j] =
          (j == m || locy[j + 1] > locy[j] ? 0 : area[j + 1]) + locy[j] - 1;
  for (int j = 1; j <= m; j++) sumy[j][0] += area[j], area[j] = 0;
  for (int j = 1; j <= m; j++)
    if (locy[j]) sumy[j][0] -= locy[j] - 1, sumy[j][1] -= n - locy[j];
  for (int i = 1; i <= n; i++)
    if (locx[i])
      area[i] =
          (i == 1 || locx[i - 1] > locx[i] ? 0 : area[i - 1]) + locx[i] - 1;
  for (int i = 1; i <= n; i++) sumx[i][0] += area[i], area[i] = 0;
  for (int i = n; i >= 1; i--)
    if (locx[i])
      area[i] =
          (i == n || locx[i + 1] > locx[i] ? 0 : area[i + 1]) + locx[i] - 1;
  for (int i = 1; i <= n; i++) sumx[i][0] += area[i], area[i] = 0;
  for (int i = 1; i <= n; i++)
    if (locx[i])
      area[i] =
          (i == 1 || locx[i - 1] < locx[i] ? 0 : area[i - 1]) + m - locx[i];
  for (int i = 1; i <= n; i++) sumx[i][1] += area[i], area[i] = 0;
  for (int i = n; i >= 1; i--)
    if (locx[i])
      area[i] =
          (i == n || locx[i + 1] < locx[i] ? 0 : area[i + 1]) + m - locx[i];
  for (int i = 1; i <= n; i++) sumx[i][1] += area[i], area[i] = 0;
  for (int i = 1; i <= n; i++)
    if (locx[i]) sumx[i][0] -= locx[i] - 1, sumx[i][1] -= m - locx[i];
  long long ans = 0, cnt = n * m;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      if (map[i][j] != 'X') {
        ans += sumx[i][j < locx[i]] + sumy[j][i < locy[j]];
      }
  ans *= 2;
  for (int i = 1; i <= n; i++)
    for (int ii = 1; ii <= n; ii++)
      ans +=
          (long long)abs(i - ii) * (m - bool(locx[i])) * (m - bool(locx[ii]));
  for (int j = 1; j <= m; j++)
    for (int jj = 1; jj <= m; jj++)
      ans +=
          (long long)abs(j - jj) * (n - bool(locy[j])) * (n - bool(locy[jj]));
  for (int j = 1; j <= m; j++)
    if (locy[j]) cnt--;
  printf("%lf\n", ans / (1. * cnt * cnt));
}
