#include <bits/stdc++.h>
using namespace std;
char c[1010][1010];
int s[2010][2010], n, m;
vector<pair<int, int> > v;
int sum(int i1, int j1, int i2, int j2) {
  return s[i2][j2] + s[i1 - 1][j1 - 1] - s[i1 - 1][j2] - s[i2][j1 - 1];
}
void solve(int i, int j, int d1, int d2, int c1 = 0, int c2 = 0) {
  if (sum(i, j, i + d1 - 1, j + d2 - 1) != d1 * d2) return;
  int s1, s2;
  s1 = max(0, sum(i, j + d2, i, j + d2));
  s2 = max(0, sum(i + d1, j, i + d1, j));
  if (s1 > 0 && s2 > 0) {
    if (c1 == 1 && c2 == 1) return;
    if (c2 == 0) solve(i, j, d1, sum(i, j, i, m), c1, 1);
    if (c1 == 0) solve(i, j, sum(i, j, n, j), d2, 1, c2);
  } else if (s1 > 0) {
    solve(i, j + 1, d1, d2, 1, c2);
  } else if (s2 > 0) {
    solve(i + 1, j, d1, d2, c1, 1);
  } else {
    v.push_back(make_pair(d1, d2));
  }
}
int check(int i, int j, int d1, int d2, int f = 1) {
  int s1 = sum(i, j + d2, i, j + d2);
  int s2 = sum(i + d1, j, i + d1, j);
  if (s1 > 0 && s2 > 0) return -1000000000;
  if (s1 > 0) return f * d1 * d2 + d1 + check(i, j + 1, d1, d2, 0);
  if (s2 > 0) return f * d1 * d2 + d2 + check(i + 1, j, d1, d2, 0);
  return f * d1 * d2;
}
int main() {
  int i, j, I(-1), J;
  cin >> n >> m;
  for (i = 1; i <= n; i++)
    for (j = 1; j <= m; j++) {
      cin >> c[i][j];
      s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + (c[i][j] == 'X');
      if (c[i][j] == 'X' && I == -1) I = i, J = j;
    }
  solve(I, J, 1, 1);
  int ans = 1000000000;
  for (i = 0; i < v.size(); i++) {
    if (v[i].first * v[i].second < ans &&
        check(I, J, v[i].first, v[i].second) == s[n][m])
      ans = v[i].first * v[i].second;
  }
  cout << (ans == 1000000000 ? -1 : ans);
}
