#include <bits/stdc++.h>
using namespace std;
struct no {
  int u, d, l, r;
  char dir;
};
no v[5000], O[5000];
int id[5000][5000];
char M[5000][5000];
int n, m;
void calcula(int x, int y) {
  int a = id[x][y];
  int resp = -1;
  for (int i = x - 1; i >= 0; i--)
    if (id[i][y] != -1) {
      resp = id[i][y];
      break;
    }
  O[a].u = resp;
  resp = -1;
  for (int i = x + 1; i < n; i++)
    if (id[i][y] != -1) {
      resp = id[i][y];
      break;
    }
  O[a].d = resp;
  resp = -1;
  for (int i = y - 1; i >= 0; i--)
    if (id[x][i] != -1) {
      resp = id[x][i];
      break;
    }
  O[a].l = resp;
  resp = -1;
  for (int i = y + 1; i < m; i++)
    if (id[x][i] != -1) {
      resp = id[x][i];
      break;
    }
  O[a].r = resp;
}
int anda(int x) {
  if (v[x].dir == 'U') return v[x].u;
  if (v[x].dir == 'D') return v[x].d;
  if (v[x].dir == 'L') return v[x].l;
  if (v[x].dir == 'R') return v[x].r;
}
void apaga(int x) {
  if (v[x].u != -1) v[v[x].u].d = v[x].d;
  if (v[x].d != -1) v[v[x].d].u = v[x].u;
  if (v[x].l != -1) v[v[x].l].r = v[x].r;
  if (v[x].r != -1) v[v[x].r].l = v[x].l;
}
int main() {
  scanf("%d %d", &n, &m);
  memset(id, -1, sizeof id);
  for (int i = 0; i < n; i++) scanf(" %s", M[i]);
  int cnt = 0;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      if (M[i][j] != '.') id[i][j] = cnt++, O[cnt - 1].dir = M[i][j];
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      if (id[i][j] != -1) calcula(i, j);
  int ans = 0, qnts = 0;
  for (int i = 0; i < cnt; i++) {
    for (int j = 0; j < cnt; j++) v[j] = O[j];
    int y = i;
    int ret = 0;
    while (1) {
      int x = y;
      y = anda(y);
      if (y == -1) break;
      apaga(x);
      ret++;
    }
    if (ans < ret) {
      qnts = 1;
      ans = ret;
    } else if (ans == ret) {
      qnts++;
    }
  }
  printf("%d %d\n", ans + 1, qnts);
  return 0;
}
