#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
const int maxn = 5003;
int n, m;
vector<char> t[maxn];
void read() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    t[i].resize(m + 3);
    for (int j = 1; j <= m; j++) cin >> t[i][j];
  }
}
vector<int> nxt_u[maxn], nxt_d[maxn], nxt_l[maxn], nxt_r[maxn];
void solve() {
  for (int i = 0; i <= n + 1; i++) {
    nxt_u[i].resize(m + 3);
    nxt_d[i].resize(m + 3);
    nxt_l[i].resize(m + 3);
    nxt_r[i].resize(m + 3);
  }
  int ans = 0, cnt_ans = 0;
  for (int x = 1; x <= n; x++)
    for (int y = 1; y <= m; y++)
      if (t[x][y] != '.') {
        for (int j = 1; j <= m; j++) nxt_u[1][j] = 0, nxt_d[n][j] = n + 1;
        for (int i = 1; i <= n; i++) nxt_l[i][1] = 0, nxt_r[i][m] = m + 1;
        for (int i = 2; i <= n; i++)
          for (int j = 1; j <= m; j++) {
            if (t[i - 1][j] == '.')
              nxt_u[i][j] = nxt_u[i - 1][j];
            else
              nxt_u[i][j] = i - 1;
          }
        for (int i = n - 1; i >= 1; i--)
          for (int j = 1; j <= m; j++) {
            if (t[i + 1][j] == '.')
              nxt_d[i][j] = nxt_d[i + 1][j];
            else
              nxt_d[i][j] = i + 1;
          }
        for (int j = 2; j <= m; j++)
          for (int i = 1; i <= n; i++) {
            if (t[i][j - 1] == '.')
              nxt_l[i][j] = nxt_l[i][j - 1];
            else
              nxt_l[i][j] = j - 1;
          }
        for (int j = m - 1; j >= 1; j--)
          for (int i = 1; i <= n; i++) {
            if (t[i][j + 1] == '.')
              nxt_r[i][j] = nxt_r[i][j + 1];
            else
              nxt_r[i][j] = j + 1;
          }
        int cnt = 0;
        int curr_x = x, curr_y = y;
        while (curr_x >= 1 && curr_x <= n && curr_y >= 1 && curr_y <= m) {
          cnt++;
          nxt_r[curr_x][nxt_l[curr_x][curr_y]] = nxt_r[curr_x][curr_y];
          nxt_l[curr_x][nxt_r[curr_x][curr_y]] = nxt_l[curr_x][curr_y];
          nxt_u[nxt_d[curr_x][curr_y]][curr_y] = nxt_u[curr_x][curr_y];
          nxt_d[nxt_u[curr_x][curr_y]][curr_y] = nxt_d[curr_x][curr_y];
          if (t[curr_x][curr_y] == 'R')
            curr_y = nxt_r[curr_x][curr_y];
          else if (t[curr_x][curr_y] == 'U')
            curr_x = nxt_u[curr_x][curr_y];
          else if (t[curr_x][curr_y] == 'D')
            curr_x = nxt_d[curr_x][curr_y];
          else
            curr_y = nxt_l[curr_x][curr_y];
        }
        if (cnt > ans) ans = cnt, cnt_ans = 0;
        if (cnt == ans) cnt_ans++;
      }
  cout << ans << " " << cnt_ans << '\n';
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  read();
  solve();
}
