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>
#pragma comment(linker, "/STACK:64000000")
using namespace std;
int sz = 0;
int n, m;
struct item {
  int l, r, u, d;
  char c;
  item() {
    l = r = u = d = -1;
    c = '.';
  }
};
item a[5010], b[5010];
int up[5010];
int calc(int num) {
  int help = num, kol = 0;
  while (help != -1) {
    a[a[help].l].r = a[help].r;
    a[a[help].r].l = a[help].l;
    a[a[help].u].d = a[help].d;
    a[a[help].d].u = a[help].u;
    if (a[help].c == 'L')
      help = a[help].l;
    else if (a[help].c == 'R')
      help = a[help].r;
    else if (a[help].c == 'U')
      help = a[help].u;
    else
      help = a[help].d;
    kol++;
  }
  return kol;
}
int main() {
  scanf("%d %d\n", &n, &m);
  memset(up, -1, sizeof(up));
  for (int i = 0; i < int(n); i++) {
    int tek = -1;
    for (int j = 0; j < int(m); j++) {
      char c;
      scanf("%c", &c);
      if (c == '.') continue;
      a[sz].l = tek;
      a[sz].u = up[j];
      a[sz].c = c;
      if (up[j] != -1) a[up[j]].d = sz;
      if (tek != -1) a[tek].r = sz;
      tek = sz;
      up[j] = sz++;
    }
    scanf("\n");
  }
  for (int i = 0; i < int(sz); i++) b[i] = a[i];
  int maxx = 0, maxkol = 0;
  for (int i = 0; i < int(sz); i++) {
    int k = calc(i);
    if (k > maxx) {
      maxx = k;
      maxkol = 1;
    } else if (k == maxx)
      maxkol++;
    for (int j = 0; j < int(sz); j++) a[j] = b[j];
  }
  cout << maxx << ' ' << maxkol << endl;
  return 0;
}
