#include <bits/stdc++.h>
using namespace std;
char aa[5001];
int n, m;
bool avail[5001];
int L[5001], R[5001], U[5001], D[5001];
int cnt[5001];
int encode(int i, int j) {
  if (i < 0 || i >= n || j < 0 || j >= m) return -1;
  return i * m + j;
}
void del(int cur) {
  int ll = L[cur], rr = R[cur], uu = U[cur], dd = D[cur];
  if (ll != -1) R[ll] = rr;
  if (rr != -1) L[rr] = ll;
  if (uu != -1) D[uu] = dd;
  if (dd != -1) U[dd] = uu;
  avail[cur] = 0;
}
int main() {
  int i, j, ii, jj;
  while (scanf("%d%d", &n, &m) == 2) {
    for (i = 0; i < n; i++) {
      for (j = 0; j < m; j++) {
        char c;
        scanf(" %c", &c);
        aa[i * m + j] = c;
        L[i * m + j] = encode(i, j - 1);
        R[i * m + j] = encode(i, j + 1);
        U[i * m + j] = encode(i - 1, j);
        D[i * m + j] = encode(i + 1, j);
      }
    }
    memset(cnt, 0, sizeof(cnt));
    for (ii = 0; ii < n; ii++) {
      for (jj = 0; jj < m; jj++) {
        int now = encode(ii, jj);
        if (aa[now] == '.') continue;
        for (i = 0; i < n; i++) {
          for (j = 0; j < m; j++) {
            L[i * m + j] = encode(i, j - 1);
            R[i * m + j] = encode(i, j + 1);
            U[i * m + j] = encode(i - 1, j);
            D[i * m + j] = encode(i + 1, j);
            avail[i * m + j] = 1;
          }
        }
        for (i = 0; i < n; i++) {
          for (j = 0; j < m; j++) {
            int cur = encode(i, j);
            if (aa[cur] == '.') del(cur);
          }
        }
        int xx = 0;
        while (now != -1) {
          int temp = now;
          if (aa[now] == 'L') {
            now = L[now];
          } else if (aa[now] == 'R') {
            now = R[now];
          } else if (aa[now] == 'U') {
            now = U[now];
          } else if (aa[now] == 'D') {
            now = D[now];
          }
          del(temp);
          xx++;
        }
        cnt[xx]++;
      }
    }
    for (i = 5000; i >= 0; i--) {
      if (cnt[i]) {
        printf("%d %d\n", i, cnt[i]);
        break;
      }
    }
  }
}
