#include <bits/stdc++.h>
using namespace std;
int n, m, cnt, Max;
vector<vector<char> > vc, a;
vector<vector<int> > up, down, rght, lft;
inline void del(int i, int j) {
  if (down[i][j] != n) up[down[i][j]][j] = up[i][j];
  if (up[i][j] != -1) down[up[i][j]][j] = down[i][j];
  if (rght[i][j] != m) lft[i][rght[i][j]] = lft[i][j];
  if (lft[i][j] != -1) rght[i][lft[i][j]] = rght[i][j];
}
inline int dfs(int i, int j) {
  if (a[i][j] == '.') return 0;
  int ret = 0;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      if (a[i][j] == '.') del(i, j);
  while (1) {
    if (i <= -1 || i >= n || j <= -1 || j >= m) break;
    ret++;
    del(i, j);
    if (a[i][j] == 'U')
      i = up[i][j];
    else if (a[i][j] == 'D')
      i = down[i][j];
    else if (a[i][j] == 'R')
      j = rght[i][j];
    else
      j = lft[i][j];
  }
  return ret;
}
int main() {
  cin >> n >> m;
  vc.resize(n);
  up.resize(n);
  down.resize(n);
  lft.resize(n);
  rght.resize(n);
  for (int i = 0; i < n; i++) {
    up[i].resize(m);
    down[i].resize(m);
    lft[i].resize(m);
    rght[i].resize(m);
    vc[i].resize(m);
    for (int j = 0; j < m; j++) cin >> vc[i][j];
  }
  a = vc;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      if (vc[i][j] != '.') {
        for (int i = 0; i < n; i++)
          for (int j = 0; j < m; j++) {
            up[i][j] = i - 1;
            down[i][j] = i + 1;
            rght[i][j] = j + 1;
            lft[i][j] = j - 1;
          }
        int hlp = dfs(i, j);
        if (hlp == Max) cnt++;
        if (hlp > Max) Max = hlp, cnt = 1;
      }
  cout << Max << ' ' << cnt << endl;
}
