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;
struct boolu {
  vector<bool> used[5001];
};
int main() {
  int n, m, i, j, mx = 0, count = 0;
  vector<char> mas[5001];
  char c;
  boolu xx, x0;
  cin >> n >> m;
  for (i = 0; i < n; i++) {
    for (j = 0; j < m; j++) {
      cin >> c;
      mas[i].push_back(c);
      x0.used[i].push_back(mas[i][j] != '.');
    }
  }
  for (i = 0; i < n; i++)
    for (j = 0; j < m; j++)
      if (x0.used[i][j]) {
        int mx1 = 0;
        xx = x0;
        int x = i, y = j;
        bool xxx = true;
        while (xxx) {
          bool lol = true;
          xx.used[x][y] = false;
          if (mas[x][y] == 'D') {
            while (x < n && lol) {
              if (xx.used[x][y] == false)
                x++;
              else
                lol = false;
            }
          } else if (mas[x][y] == 'U') {
            while (x >= 0 && lol) {
              if (xx.used[x][y] == false)
                x--;
              else
                lol = false;
            }
          } else if (mas[x][y] == 'L') {
            while (y >= 0 && lol) {
              if (xx.used[x][y] == false)
                y--;
              else
                lol = false;
            }
          } else if (mas[x][y] == 'R') {
            while (y < m && lol) {
              if (xx.used[x][y] == false)
                y++;
              else
                lol = false;
            }
          }
          if (lol == false) {
            mx1++;
          } else
            xxx = false;
        }
        x0 = xx;
        if (mx1 > mx) {
          mx = mx1;
          count = 1;
        } else if (mx == mx1)
          count++;
      }
  if (count == 0) mx = -1;
  cout << mx + 1 << " " << count << endl;
  return 0;
}
