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 item {
  char c;
  item *l, *r, *u, *d;
};
item make_item(char c) {
  item it;
  it.l = NULL;
  it.r = NULL;
  it.u = NULL;
  it.d = NULL;
  it.c = c;
  return it;
}
int n, m;
vector<vector<item> > B;
void build_net_of_links() {
  for (int i = 1; i <= n; i++) {
    item *it = NULL;
    for (int j = 1; j <= m; j++) {
      B[i][j].l = it;
      if (B[i][j].c != '.') it = &B[i][j];
    }
  }
  for (int i = 1; i <= n; i++) {
    item *it = NULL;
    for (int j = m; j >= 1; j--) {
      B[i][j].r = it;
      if (B[i][j].c != '.') it = &B[i][j];
    }
  }
  for (int j = 1; j <= m; j++) {
    item *it = NULL;
    for (int i = 1; i <= n; i++) {
      B[i][j].u = it;
      if (B[i][j].c != '.') it = &B[i][j];
    }
  }
  for (int j = 1; j <= m; j++) {
    item *it = NULL;
    for (int i = n; i >= 1; i--) {
      B[i][j].d = it;
      if (B[i][j].c != '.') it = &B[i][j];
    }
  }
}
int modeling(int is, int js) {
  build_net_of_links();
  item *cur = &B[is][js];
  int res = 0;
  while (cur) {
    if (cur->l) cur->l->r = cur->r;
    if (cur->r) cur->r->l = cur->l;
    if (cur->u) cur->u->d = cur->d;
    if (cur->d) cur->d->u = cur->u;
    if (cur->c == 'L')
      cur = cur->l;
    else if (cur->c == 'R')
      cur = cur->r;
    else if (cur->c == 'D')
      cur = cur->d;
    else if (cur->c == 'U')
      cur = cur->u;
    res++;
  }
  return res;
}
int main() {
  cin >> n >> m;
  char a;
  B.assign(n + 1, vector<item>(m + 1));
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) {
      cin >> a;
      B[i][j] = make_item(a);
    }
  int maxima = 0;
  int cnt = 0;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) {
      if (B[i][j].c != '.') {
        int cur = modeling(i, j);
        if (cur > maxima)
          maxima = cur, cnt = 1;
        else if (cur == maxima)
          cnt++;
      }
    }
  cout << maxima << " " << cnt << endl;
  return 0;
}
