#include <bits/stdc++.h>
using namespace std;
const int N = 5050;
int n, m, x[N], y[N], dirmap[300], dir[N], _;
char s[N];
struct DirLink {
  int go[4];
} D[N], G[N];
void Link(int u, int v, int a, int b, DirLink* d) {
  d[u].go[a] = v, d[v].go[b] = u;
}
void Del(int x, DirLink* d) {
  for (int i = 0; i < (4); ++i)
    if (d[x].go[i]) d[d[x].go[i]].go[i ^ 2] = d[x].go[i ^ 2];
}
int main() {
  dirmap['R'] = 0;
  dirmap['L'] = 2;
  dirmap['U'] = 1;
  dirmap['D'] = 3;
  scanf("%d%d", &n, &m);
  _ = 0;
  for (int i = 1; i < (n + 1); ++i) {
    scanf("%s", s + 1);
    for (int j = 1; j < (m + 1); ++j)
      if (s[j] != '.') {
        dir[++_] = dirmap[(int)s[j]];
        if (x[i]) Link(x[i], _, 0, 2, D);
        x[i] = _;
        if (y[j]) Link(y[j], _, 3, 1, D);
        y[j] = _;
      }
  }
  for (int i = 1; i < (_ + 1); ++i) G[i] = D[i];
  pair<int, int> ans = make_pair(0, 1);
  for (int i = 1; i < (_ + 1); ++i) {
    for (int j = 1; j < (_ + 1); ++j) D[j] = G[j];
    int cnt = 0;
    for (int c = i, t; c; c = t) {
      t = D[c].go[dir[c]];
      Del(c, D);
      cnt++;
    }
    if (cnt > ans.first)
      ans = make_pair(cnt, 1);
    else
      ans.second += (cnt == ans.first);
  }
  printf("%d %d\n", ans.first, ans.second);
  return 0;
}
