#include <bits/stdc++.h>
using namespace std;
int N, M, best, curr, cnt;
char A[5005][5005], B[5005][5005];
int P[4][4 * 5005], up, dp, lp, rp;
int pos(int x, int y) {
  if (x < 1 || x > N || y < 1 || y > M) return 0;
  return (x - 1) * M + y;
}
int X(int p) {
  p--;
  return (p / M) + 1;
}
int Y(int p) {
  int ret = (p % M);
  if (ret == 0) ret = M;
  return ret;
}
void init() {
  for (int I = 1; I <= N; I++)
    for (int K = 1; K <= M; K++) B[I][K] = A[I][K];
  for (int I = 1; I <= N; I++)
    for (int K = 1; K <= M; K++) {
      int p = pos(I, K);
      P[0][p] = pos(I - 1, K);
      P[1][p] = pos(I + 1, K);
      P[2][p] = pos(I, K - 1);
      P[3][p] = pos(I, K + 1);
    }
}
int setof(int p, int id) {
  if (p == 0 || (B[X(p)][Y(p)] != '.')) return p;
  return P[id][p] = setof(P[id][p], id);
}
int DFS(int x, int y) {
  int p = pos(x, y), np = -1;
  char tmp = B[x][y];
  B[x][y] = '.';
  if (tmp == 'U')
    np = setof(p, 0);
  else if (tmp == 'D')
    np = setof(p, 1);
  else if (tmp == 'L')
    np = setof(p, 2);
  else if (tmp == 'R')
    np = setof(p, 3);
  else
    assert(false);
  assert(np != -1);
  if (np == 0) return 1;
  return 1 + DFS(X(np), Y(np));
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> N >> M;
  for (int I = 1; I <= N; I++) cin >> A[I] + 1;
  for (int I = 1; I <= N; I++)
    for (int K = 1; K <= M; K++) {
      int p = pos(I, K);
    }
  for (int I = 1; I <= N; I++)
    for (int K = 1; K <= M; K++)
      if (A[I][K] != '.') {
        init();
        curr = DFS(I, K);
        if (curr > best) {
          best = curr;
          cnt = 1;
        } else if (curr == best) {
          cnt++;
        }
      }
  cout << best << " " << cnt << endl;
}
