#include <bits/stdc++.h>
using namespace std;
const int dx[] = {-1, 0, 1, 0};
const int dy[] = {0, 1, 0, -1};
const int op[] = {2, 3, 0, 1};
const char str[] = "URDL";
struct E {
  pair<int, int> d[4];
  pair<int, int> next;
  E() { memset(d, -1, sizeof(d)); }
};
vector<string> in;
vector<vector<E> > arr, def;
inline void MakeLink(int i, int j) {
  for (int k = 0; k < 4; k++)
    if (str[k] == in[i][j]) arr[i][j].next = arr[i][j].d[k];
}
int Func(int x, int y) {
  queue<pair<int, int> > q;
  q.push(make_pair(x, y));
  int ans = 0;
  while (!q.empty()) {
    pair<int, int> v = q.front();
    q.pop();
    x = v.first;
    y = v.second;
    if (x == -1 || y == -1) return ans;
    ans++;
    for (int i = 0; i < 4; i++)
      if (arr[x][y].d[i].first != -1) {
        int nx = arr[x][y].d[i].first;
        int ny = arr[x][y].d[i].second;
        arr[nx][ny].d[op[i]] = arr[x][y].d[op[i]];
        MakeLink(nx, ny);
      }
    q.push(make_pair(arr[x][y].next.first, arr[x][y].next.second));
  }
  return ans;
}
int main() {
  int n, m;
  cin >> n >> m;
  in.resize(n);
  arr.assign(n, vector<E>(m));
  for (int i = 0; i < n; i++) cin >> in[i];
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      if (in[i][j] != '.') {
        for (int k = 0; k < 4; k++) {
          int nx = i + dx[k];
          int ny = j + dy[k];
          while (nx >= 0 && nx < n && ny >= 0 && ny < m) {
            if (in[nx][ny] != '.') {
              arr[i][j].d[k] = make_pair(nx, ny);
              break;
            }
            nx += dx[k];
            ny += dy[k];
          }
        }
        MakeLink(i, j);
      }
  def = arr;
  pair<int, int> ans(0, 0);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      if (in[i][j] != '.') {
        arr = def;
        int now = Func(i, j);
        if (now > ans.first)
          ans = make_pair(now, 1);
        else if (now == ans.first)
          ans.second++;
      }
  cout << ans.first << " " << ans.second << endl;
  return 0;
}
