#include <bits/stdc++.h>
using namespace std;
char **g;
int **lx, **rx;
int **ly, **ry;
int n, m;
template <class T>
void getarr(T ***a) {
  *a = (T **)malloc((n + 10) * sizeof(T *));
  for (int i = 0; i < n + 10; i++) {
    (*a)[i] = (T *)malloc((m + 10) * sizeof(T));
  }
}
void del(int x, int y) {
  rx[x][lx[x][y]] = rx[x][y];
  lx[x][rx[x][y]] = lx[x][y];
  ry[ly[x][y]][y] = ry[x][y];
  ly[ry[x][y]][y] = ly[x][y];
}
void init() {
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j <= m; j++) {
      lx[i][j] = j - 1;
      rx[i][j] = j + 1;
    }
    lx[i][0] = m;
    rx[i][m] = 0;
  }
  for (int i = 1; i <= m; i++) {
    for (int j = 0; j <= n; j++) {
      ly[j][i] = j - 1;
      ry[j][i] = j + 1;
    }
    ly[0][i] = n;
    ry[n][i] = 0;
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      if (g[i][j] == '.') {
        del(i, j);
      }
    }
  }
}
int to[300];
int solve(int x, int y) {
  int cc = 0;
  while (x != 0 && y != 0) {
    int d = to[g[x][y]];
    cc++;
    del(x, y);
    if (d == 0) {
      x = ly[x][y];
    } else if (d == 1) {
      y = rx[x][y];
    } else if (d == 2) {
      x = ry[x][y];
    } else {
      y = lx[x][y];
    }
  }
  return cc;
}
int main() {
  to['U'] = 0;
  to['R'] = 1;
  to['D'] = 2;
  to['L'] = 3;
  scanf("%d%d", &n, &m);
  getarr(&g);
  getarr(&lx);
  getarr(&rx);
  getarr(&ly);
  getarr(&ry);
  for (int i = 1; i <= n; i++) {
    scanf("%s", g[i] + 1);
  }
  int ans1 = -1, ans2 = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      if (g[i][j] != '.') {
        init();
        int ret = solve(i, j);
        if (ans1 < ret) {
          ans1 = ret;
          ans2 = 1;
        } else if (ans1 == ret) {
          ans2++;
        }
      }
    }
  }
  printf("%d %d\n", ans1, ans2);
  return 0;
}
