#include <bits/stdc++.h>
using namespace std;
const int Maxn = 2e5 + 7;
const int Max = 5e3 + 7;
const int Mod = 1e9 + 7;
const int Inf = 2e9 + 1e8;
int a[Max][Max], g[Max][Max], p[5][Max], t;
pair<int, int> G[Max];
void dfs(int u) {
  if (u == 0) return;
  t++;
  int U = p[1][u], D = p[2][u];
  int R = p[3][u], L = p[4][u];
  p[2][U] = D, p[1][D] = U;
  p[4][R] = L, p[3][L] = R;
  pair<int, int> v = G[u];
  int jahat = a[v.first][v.second];
  dfs(p[jahat][u]);
  p[2][U] = u, p[1][D] = u;
  p[4][R] = u, p[3][L] = u;
}
int change(char t, int R) {
  if (t == '.') return 0;
  if (t == 'U') return 1;
  if (t == 'D') return 2;
  if (t == 'R')
    return 3;
  else
    return 4;
}
int main() {
  ios_base::sync_with_stdio(false);
  int n, m;
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      char C;
      cin >> C;
      a[i][j] = change(C, 0);
    }
  }
  int k = 0;
  for (int i = 1; i <= n; i++) {
    int tmp = 0;
    for (int j = 1; j <= m; j++) {
      k++;
      g[i][j] = k;
      G[k] = make_pair(i, j);
      if (a[i][j] == 0) continue;
      p[4][k] = tmp;
      if (tmp) p[3][tmp] = k;
      tmp = k;
    }
  }
  for (int i = 1; i <= m; i++) {
    int tmp = 0;
    for (int j = n; j >= 1; j--) {
      if (a[j][i] == 0) continue;
      k = g[j][i];
      p[2][k] = tmp;
      if (tmp) p[1][tmp] = k;
      tmp = k;
    }
  }
  int ans = 0, p = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      t = 0;
      if (a[i][j] == 0) continue;
      dfs(g[i][j]);
      if (ans < t) p = 1;
      if (ans == t) p++;
      ans = max(ans, t);
    }
  }
  printf("%d %d", ans, p);
  return 0;
}
