#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3fffffff;
const long long _INF = 0x7ffffffffffffffll;
const double EPS = 1e-9;
const double PI = acos(-1.0);
template <class T, class INT>
inline T pow(T x, INT y) {
  T res(1);
  for (T tt(x); y; y /= 2) {
    if (y & 1) res *= tt;
    tt *= tt;
  }
  return res;
}
template <class T, class INT>
inline T pow(T x, INT y, T p) {
  T res(1);
  for (T tt(x); y; y /= 2) {
    if (y & 1) res = res * tt % p;
    tt = tt * tt % p;
  }
  return res;
}
int toInt(string s) {
  int x = 0;
  istringstream sin(s);
  sin >> x;
  return x;
}
template <class T>
inline string toString(T x) {
  ostringstream sout;
  sout << x;
  return sout.str();
}
template <class INT>
inline INT gcd(INT x, INT y) {
  return y ? gcd(y, x % y) : x;
}
template <class INT>
inline int calc_bits(INT x) {
  return x ? (x & 1) + calc_bits(x >> 1) : 0;
}
const int MAXN = 1000 + 10;
int n, m, cnt, r[MAXN], c[MAXN], u[MAXN], d[MAXN];
string a[MAXN];
double ans;
inline long long calc(int x, int n) {
  return (n - x) * (n - x - 1) / 2 + (x + 1) * x / 2;
}
int main(int argc, char* argv[]) {
  cin >> n >> m;
  for (int i = 0; i < (n); ++i) cin >> a[i];
  cnt = n * m;
  memset(r, 255, sizeof(r)), memset(c, 255, sizeof(c));
  for (int i = 0; i < (n); ++i)
    for (int j = 0; j < (m); ++j)
      if (a[i][j] == 'X') r[i] = j, c[j] = i, --cnt;
  for (int i = 0; i < (n); ++i) {
    u[i] = r[i];
    d[i] = m - r[i] - 1;
    if (r[i] != -1) {
      if (i && r[i - 1] != -1 && r[i - 1] < r[i]) u[i] += u[i - 1];
      if (i && r[i - 1] != -1 && r[i - 1] > r[i]) d[i] += d[i - 1];
    }
  }
  for (int i = (n - 1); i > (-1); --i)
    if (r[i] != -1) {
      if (i < n - 1 && r[i + 1] != -1 && r[i + 1] < r[i]) u[i] += u[i + 1];
      if (i < n - 1 && r[i + 1] != -1 && r[i + 1] > r[i]) d[i] += d[i + 1];
    }
  for (int i = 0; i < (m); ++i) ans += n * n * calc(i, m);
  for (int i = 0; i < (n); ++i)
    for (int j = 0; j < (n); ++j) {
      ans += (r[i] == -1 ? m : m - 1) * (r[j] == -1 ? m : m - 1) * abs(i - j);
      if (i == j && r[i] != -1)
        ans += 2 * (u[i] * (m - r[i] - 1) + d[i] * r[i]);
      if (r[i] != -1) ans -= calc(r[i], m);
      if (r[j] != -1) ans -= calc(r[j], m);
      if (r[i] != -1 && r[j] != -1) ans += abs(r[i] - r[j]);
    }
  for (int i = 0; i < (m); ++i) {
    u[i] = c[i];
    d[i] = n - c[i] - 1;
    if (c[i] != -1) {
      if (i && c[i - 1] != -1 && c[i - 1] < c[i]) u[i] += u[i - 1];
      if (i && c[i - 1] != -1 && c[i - 1] > c[i]) d[i] += d[i - 1];
    }
  }
  for (int i = (m - 1); i > (-1); --i)
    if (c[i] != -1) {
      if (i < m - 1 && c[i + 1] != -1 && c[i + 1] < c[i]) u[i] += u[i + 1];
      if (i < m - 1 && c[i + 1] != -1 && c[i + 1] > c[i]) d[i] += d[i + 1];
    }
  for (int i = 0; i < (m); ++i)
    if (c[i] != -1) ans += 2 * (u[i] * (n - c[i] - 1) + d[i] * c[i]);
  cout << setprecision(8) << fixed << ans / cnt / cnt << endl;
}
