#include <bits/stdc++.h>
using namespace std;
const int maxn = 5005;
map<int, int> ndx;
int back[maxn];
int u[maxn], d[maxn], l[maxn], r[maxn];
char str[maxn][maxn];
int n, m;
int bu[maxn], bd[maxn], bl[maxn], br[maxn];
inline void build() {
  int i, j, x;
  for (i = 0; i < n; i++) {
    x = -1;
    for (j = 0; j < m; j++)
      if (str[i][j] != '.') {
        if (x == -1)
          l[ndx[i * m + j]] = -1;
        else
          l[ndx[i * m + j]] = ndx[i * m + x];
        x = j;
      }
    x = -1;
    for (j = m - 1; j >= 0; j--)
      if (str[i][j] != '.') {
        if (x == -1)
          r[ndx[i * m + j]] = -1;
        else
          r[ndx[i * m + j]] = ndx[i * m + x];
        x = j;
      }
  }
  for (j = 0; j < m; j++) {
    x = -1;
    for (i = 0; i < n; i++)
      if (str[i][j] != '.') {
        if (x == -1)
          u[ndx[i * m + j]] = -1;
        else
          u[ndx[i * m + j]] = ndx[x * m + j];
        x = i;
      }
    x = -1;
    for (i = n - 1; i >= 0; i--)
      if (str[i][j] != '.') {
        if (x == -1)
          d[ndx[i * m + j]] = -1;
        else
          d[ndx[i * m + j]] = ndx[x * m + j];
        x = i;
      }
  }
}
inline void remove(int x) {
  if (u[x] != -1) d[u[x]] = d[x];
  if (d[x] != -1) u[d[x]] = u[x];
  if (l[x] != -1) r[l[x]] = r[x];
  if (r[x] != -1) l[r[x]] = l[x];
}
inline int travel(int x) {
  int step = 0;
  int i, j;
  while (x != -1) {
    step++;
    i = back[x] / m;
    j = back[x] % m;
    remove(x);
    switch (str[i][j]) {
      case 'U':
        x = u[x];
        break;
      case 'D':
        x = d[x];
        break;
      case 'L':
        x = l[x];
        break;
      case 'R':
        x = r[x];
        break;
    }
  }
  return step;
}
int main() {
  int i, j, num, ans, tot, t = 0;
  scanf("%d%d", &n, &m);
  for (i = 0; i < n; i++) scanf("%s", str[i]);
  for (i = 0; i < n; i++)
    for (j = 0; j < m; j++)
      if (str[i][j] != '.') {
        ndx[i * m + j] = ++t;
        back[t] = i * m + j;
      }
  ans = tot = 0;
  build();
  memcpy(bu, u, 4 * (t + 1));
  memcpy(bd, d, 4 * (t + 1));
  memcpy(bl, l, 4 * (t + 1));
  memcpy(br, r, 4 * (t + 1));
  for (i = 0; i < n; i++)
    for (j = 0; j < m; j++)
      if (str[i][j] != '.') {
        memcpy(u, bu, 4 * (t + 1));
        memcpy(d, bd, 4 * (t + 1));
        memcpy(l, bl, 4 * (t + 1));
        memcpy(r, br, 4 * (t + 1));
        num = travel(ndx[i * m + j]);
        if (num > ans) {
          ans = num;
          tot = 1;
        } else if (num == ans)
          tot++;
      }
  printf("%d %d\n", ans, tot);
  return 0;
}
