#include <bits/stdc++.h>
using namespace std;
const int maxN = 5000;
string s[5001];
int n, m, ans, t;
int **l, **r, **u, **d;
void build() {
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) {
      if (!i)
        u[i][j] = -1;
      else {
        u[i][j] = u[i - 1][j];
        if (s[i - 1][j] != '.') u[i][j] = i - 1;
      }
      if (!j)
        l[i][j] = -1;
      else {
        l[i][j] = l[i][j - 1];
        if (s[i][j - 1] != '.') l[i][j] = j - 1;
      }
    }
  for (int i = n - 1; i + 1; i--)
    for (int j = m - 1; j + 1; j--) {
      if (!(n - i - 1))
        d[i][j] = -1;
      else {
        d[i][j] = d[i + 1][j];
        if (s[i + 1][j] != '.') d[i][j] = i + 1;
      }
      if (!(m - j - 1))
        r[i][j] = -1;
      else {
        r[i][j] = r[i][j + 1];
        if (s[i][j + 1] != '.') r[i][j] = j + 1;
      }
    }
}
void upd(int y, int x) {
  if (r[y][x] >= 0) l[y][r[y][x]] = l[y][x];
  if (l[y][x] >= 0) r[y][l[y][x]] = r[y][x];
  if (d[y][x] >= 0) u[d[y][x]][x] = u[y][x];
  if (u[y][x] >= 0) d[u[y][x]][x] = d[y][x];
}
int go(int y, int x) {
  if (min(x, y) < 0) return 0;
  char c = s[y][x];
  upd(y, x);
  if (c == 'L') return go(y, l[y][x]) + 1;
  if (c == 'R') return go(y, r[y][x]) + 1;
  if (c == 'U') return go(u[y][x], x) + 1;
  return go(d[y][x], x) + 1;
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < n; i++) cin >> s[i];
  l = new int *[n + 10];
  r = new int *[n + 10];
  u = new int *[n + 10];
  d = new int *[n + 10];
  for (int i = 0; i < n + 10; i++) {
    l[i] = new int[m + 10];
    r[i] = new int[m + 10];
    d[i] = new int[m + 10];
    u[i] = new int[m + 10];
  }
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      if (s[i][j] != '.') {
        build();
        int kk = go(i, j);
        if (kk > ans) {
          t = 0;
          ans = kk;
        }
        if (kk == ans) t++;
      }
  cout << ans << " " << t << endl;
  cin >> n;
}
