10 10
.L.....R..
.........U
..D....D..
.R......L.
....L.....
.........D
......U...
D....R....
...U......
........L.
 5 5
DD..D
.....
LU...
U...U
.UL.U
 1 1
U
 5 5
UD..L
RRD..
..RDD
UUL..
DDLRR
 19 23
U..U..R........L...D...
.D.....UL.U.U........DR
..D.U..D....L......R...
D.......RL.L....D.....R
U..D.....U...U.L..D...U
...........L...........
U....U....D.U......LRR.
......RL...U...L.......
DLU..U......UU.U.U.D...
...........D....U......
U...DL......LL.....R...
...U..DD..........LD...
.R.........D.....UU...U
....D......R..........D
.L..........R.....L....
.R........L.LL....R....
..R...D........R....D..
.LR.R..LDU.DDRL......U.
...LL.....D.....DD.....
 11 29
URRUUDDLURLRDDLLRLDUDR.UDLLD.
LRRUDLUDLDULUDL.DURDRR.RRLLRR
D.DUDDURLRDDULDUDDUDDURRDLD.L
.RULURURRDLRRRLUUUU.RDLDLRRRL
.RLDDU.UUULUURURRLLUU.RLDRDUD
LRL.URRRDDURUURUDRRDLDDULRDRL
RLULDU.LRDUDRLDLRDDDDRUUDRDLL
DLUDURRDDUDLLDLLUURLDRUURRLUL
L.RRURRDDRRURRRDDUDRRDULR.LUR
LDLRULURRUULRDUUULLU.LLU.LLLL
DUURDULDDUDLRUUDRUULURLD.RL.U
 2 2
RD
UL
 1 10
LLLLLRRRRR
 3 3
...
...
..R
 17 13
...LD.UR.RUU.
LDLULDUDRRDRL
DD.RRLRUR.UD.
RU...D...LD..
.UR.R...URUUD
.RURD.RLR.D.R
.UUU.RU...UR.
UUUU.R.......
RL.LRU.UD.DUD
LD.DRURRLRDRL
.DR..UULUDDR.
LRLURRUUDDLUR
.LRDDLLR.L.DU
DRUDLLD.LRRU.
..DL.UDL.DUL.
U.DL..D..U.RD
RR.R...RL.L..

2 2
 4 1
 1 1
 8 3
 9 1
 94 1
 4 4
 5 2
 1 1
 24 2

#include <bits/stdc++.h>
using namespace std;
const int maxn = 5000 + 10;
short int RowNext[maxn][maxn], RowPrev[maxn][maxn], ColNext[maxn][maxn],
    ColPrev[maxn][maxn], n, m;
char c[maxn][maxn];
void makeLinks() {
  for (int r = 1; r <= n; r++) {
    int pr = 0;
    for (int i = 1; i <= m; i++) {
      RowPrev[r][i] = pr;
      if (c[r][i] != '.' && pr != 0) RowNext[r][pr] = i;
      if (c[r][i] != '.') pr = i;
    }
  }
  for (int col = 1; col <= m; col++) {
    int pr = 0;
    for (int i = 1; i <= n; i++) {
      ColPrev[col][i] = pr;
      if (c[i][col] != '.' && pr != 0) ColNext[col][pr] = i;
      if (c[i][col] != '.') pr = i;
    }
  }
}
pair<int, int> neX(int i, int j) {
  if (c[i][j] == 'R') {
    if (RowNext[i][j] == 0) return make_pair(0, 0);
    return make_pair(i, RowNext[i][j]);
  }
  if (c[i][j] == 'L') {
    if (RowPrev[i][j] == 0) return make_pair(0, 0);
    return make_pair(i, RowPrev[i][j]);
  }
  if (c[i][j] == 'D') {
    if (ColNext[j][i] == 0) return make_pair(0, 0);
    return make_pair(ColNext[j][i], j);
  }
  if (c[i][j] == 'U') {
    if (ColPrev[j][i] == 0) return make_pair(0, 0);
    return make_pair(ColPrev[j][i], j);
  }
}
void del(int i, int j) {
  if (RowNext[i][j] != 0 && RowPrev[i][j] != 0) {
    RowNext[i][RowPrev[i][j]] = RowNext[i][j];
    RowPrev[i][RowNext[i][j]] = RowPrev[i][j];
  } else if (RowNext[i][j] != 0) {
    RowPrev[i][RowNext[i][j]] = 0;
  } else if (RowPrev[i][j] != 0) {
    RowNext[i][RowPrev[i][j]] = 0;
  }
  if (ColNext[j][i] != 0 && ColPrev[j][i] != 0) {
    ColNext[j][ColPrev[j][i]] = ColNext[j][i];
    ColPrev[j][ColNext[j][i]] = ColPrev[j][i];
  } else if (ColNext[j][i] != 0) {
    ColPrev[j][ColNext[j][i]] = 0;
  } else if (ColPrev[j][i] != 0) {
    ColNext[j][ColPrev[j][i]] = 0;
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  int Ans = 0, maxx = -10000;
  cin >> n >> m;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) cin >> c[i][j];
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) {
      if (c[i][j] == '.') continue;
      makeLinks();
      int x = i, y = j, ans = 0;
      while (true) {
        ans++;
        if (neX(x, y).first == 0) break;
        pair<int, int> X = neX(x, y);
        del(x, y);
        x = X.first, y = X.second;
      }
      if (ans > maxx)
        Ans = 1, maxx = ans;
      else if (ans == maxx)
        Ans++;
    }
  cout << maxx << " " << Ans << endl;
}
