#include <bits/stdc++.h>
using namespace std;
const int maxn = 5005;
int id[maxn][maxn];
char s[maxn][maxn];
char c[maxn];
int l[maxn], r[maxn], u[maxn], d[maxn];
int n, m, t;
void init() {
  int i, j;
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= m; j++) {
      l[id[i][j]] = id[i][j - 1];
      r[id[i][j]] = id[i][j + 1];
      u[id[i][j]] = id[i - 1][j];
      d[id[i][j]] = id[i + 1][j];
    }
  }
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= m; j++) {
      if (s[i][j] == '.') {
        r[l[id[i][j]]] = r[id[i][j]];
        l[r[id[i][j]]] = l[id[i][j]];
        u[d[id[i][j]]] = u[id[i][j]];
        d[u[id[i][j]]] = d[id[i][j]];
      }
    }
  }
}
void del(int k) {
  r[l[k]] = r[k];
  l[r[k]] = l[k];
  u[d[k]] = u[k];
  d[u[k]] = d[k];
}
int dfs(int cur) {
  if (cur == 0) return 0;
  del(cur);
  if (c[cur] == 'U') return dfs(u[cur]) + 1;
  if (c[cur] == 'D') return dfs(d[cur]) + 1;
  if (c[cur] == 'L') return dfs(l[cur]) + 1;
  if (c[cur] == 'R') return dfs(r[cur]) + 1;
  return 0;
}
void work() {
  int i, j;
  int ans, max = 0, num;
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= m; j++) {
      if (s[i][j] != '.') {
        init();
        ans = dfs(id[i][j]);
        if (ans > max) {
          max = ans;
          num = 1;
        } else if (ans == max)
          num++;
      }
    }
  }
  printf("%d %d\n", max, num);
}
int main() {
  int i, j;
  while (scanf("%d%d", &n, &m) != EOF) {
    for (i = 1; i <= n; i++) scanf("%s", &s[i][1]);
    t = 0;
    memset(id, 0, sizeof(id));
    for (i = 1; i <= n; i++) {
      for (j = 1; j <= m; j++) {
        t++;
        id[i][j] = t;
        c[t] = s[i][j];
      }
    }
    work();
  }
  return 0;
}
