#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
int n, m, ind, tin[N], tou[N], deg[N];
vector<array<int, 3> > mod[N];
vector<int> e[N];
long long ans;
void ae(int k1, int k2) { e[k1].push_back(k2), ++deg[k2]; }
int zip(int x, int y) { return x * m + y; }
int tg[N * 4], mn[N * 4], t[N * 4];
void pst(int k1, int k2) { tg[k1] += k2, mn[k1] += k2; }
void psd(int k1) {
  if (tg[k1]) {
    pst(k1 * 2, tg[k1]);
    pst(k1 * 2 + 1, tg[k1]);
    tg[k1] = 0;
  }
}
void upd(int k1) {
  mn[k1] = min(mn[k1 * 2], mn[k1 * 2 + 1]);
  t[k1] = 0;
  if (mn[k1] == mn[k1 * 2]) t[k1] += t[k1 * 2];
  if (mn[k1] == mn[k1 * 2 + 1]) t[k1] += t[k1 * 2 + 1];
}
void add(int k1, int k2, int k3, int k4, int k5, int k6) {
  if (k2 > k5 || k3 < k4) return;
  if (k4 <= k2 && k3 <= k5) {
    pst(k1, k6);
    return;
  }
  psd(k1);
  int mid = (k2 + k3) >> 1;
  add(k1 * 2, k2, mid, k4, k5, k6), add(k1 * 2 + 1, mid + 1, k3, k4, k5, k6);
  upd(k1);
}
void bud(int k1, int k2, int k3) {
  if (k2 == k3) {
    t[k1] = 1;
    return;
  }
  int mid = (k2 + k3) >> 1;
  bud(k1 * 2, k2, mid), bud(k1 * 2 + 1, mid + 1, k3);
  upd(k1);
}
int main() {
  scanf("%d%d", &n, &m);
  vector<string> s(n);
  for (int i = (0); i <= (n - 1); ++i) cin >> s[i];
  for (int i = (0); i <= (n - 1); ++i) {
    for (int j = (0); j <= (m - 1); ++j) {
      if (j + 2 < m && s[i][j + 1] == 'L' && s[i][j + 2] == 'R') {
        ae(zip(i, j), zip(i, j + 2));
      }
      if (j - 2 >= 0 && s[i][j - 1] == 'R' && s[i][j - 2] == 'L') {
        ae(zip(i, j), zip(i, j - 2));
      }
      if (i + 2 < n && s[i + 1][j] == 'U' && s[i + 2][j] == 'D') {
        ae(zip(i, j), zip(i + 2, j));
      }
      if (i - 2 >= 0 && s[i - 1][j] == 'D' && s[i - 2][j] == 'U') {
        ae(zip(i, j), zip(i - 2, j));
      }
    }
  }
  function<void(int, int)> dfs = [&](int k1, int k2) {
    tin[k1] = ++ind;
    for (const auto& x : e[k1])
      if (x != k2) dfs(x, k1);
    tou[k1] = ind;
  };
  for (int i = (0); i <= (n * m - 1); ++i)
    if (!deg[i]) dfs(i, 0);
  for (int i = (0); i <= (n - 1); ++i)
    for (int j = (0); j <= (m - 1); ++j) {
      pair<int, int> rg1, rg2;
      if (s[i][j] == 'L') {
        rg1 = make_pair(tin[zip(i, j)], tou[zip(i, j)]);
        rg2 = make_pair(tin[zip(i, j + 1)], tou[zip(i, j + 1)]);
        if ((i + j) & 1) swap(rg1, rg2);
      } else if (s[i][j] == 'U') {
        rg1 = make_pair(tin[zip(i, j)], tou[zip(i, j)]);
        rg2 = make_pair(tin[zip(i + 1, j)], tou[zip(i + 1, j)]);
        if ((i + j) & 1) swap(rg1, rg2);
      } else
        continue;
      ((void)0);
      mod[rg1.first].push_back({rg2.first, rg2.second, 1});
      mod[rg1.second + 1].push_back({rg2.first, rg2.second, -1});
    }
  bud(1, 1, n * m);
  for (int i = (0); i <= (n * m); ++i) {
    for (const auto& arr : mod[i]) {
      add(1, 1, n * m, arr[0], arr[1], arr[2]);
    }
    ((void)0);
    ans += n * m - (mn[1] == 0 ? t[1] : 0);
  }
  printf("%lld\n", ans);
  return 0;
}
