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;
char g[5005][5005];
vector<vector<pair<int, int> > > L, R, U, D;
vector<vector<pair<int, int> > > LL, RR, UU, DD;
int n, m;
void remove_node(int i, int j) {
  int ui = UU[i][j].first, uj = UU[i][j].second;
  int di = DD[i][j].first, dj = DD[i][j].second;
  int li = LL[i][j].first, lj = LL[i][j].second;
  int ri = RR[i][j].first, rj = RR[i][j].second;
  DD[ui][uj] = DD[i][j];
  UU[di][dj] = UU[i][j];
  LL[ri][rj] = LL[i][j];
  RR[li][lj] = RR[i][j];
}
int search(int i, int j) {
  int ret = 1;
  while (true) {
    int new_i, new_j;
    if (g[i][j] == 'L') {
      if (LL[i][j].first == 0) {
        return ret;
      }
      new_i = LL[i][j].first;
      new_j = LL[i][j].second;
    } else if (g[i][j] == 'R') {
      if (RR[i][j].first == 0) {
        return ret;
      }
      new_i = RR[i][j].first;
      new_j = RR[i][j].second;
    } else if (g[i][j] == 'U') {
      if (UU[i][j].first == 0) {
        return ret;
      }
      new_i = UU[i][j].first;
      new_j = UU[i][j].second;
    } else {
      if (DD[i][j].first == 0) {
        return ret;
      }
      new_i = DD[i][j].first;
      new_j = DD[i][j].second;
    }
    remove_node(i, j);
    i = new_i;
    j = new_j;
    ++ret;
  }
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      scanf(" %c", &g[i][j]);
    }
  }
  L = R = U = D =
      vector<vector<pair<int, int> > >(n + 1, vector<pair<int, int> >(m + 1));
  for (int i = 1; i <= n; ++i) {
    int last = 0;
    for (int j = 1; j <= m; ++j) {
      if (g[i][j] != '.') {
        if (last != 0) {
          L[i][j] = make_pair(i, last);
        }
        last = j;
      }
    }
  }
  for (int i = 1; i <= n; ++i) {
    int last = 0;
    for (int j = m; j >= 1; --j) {
      if (g[i][j] != '.') {
        if (last != 0) {
          R[i][j] = make_pair(i, last);
        }
        last = j;
      }
    }
  }
  for (int j = 1; j <= m; ++j) {
    int last = 0;
    for (int i = 1; i <= n; ++i) {
      if (g[i][j] != '.') {
        if (last != 0) {
          U[i][j] = make_pair(last, j);
        }
        last = i;
      }
    }
  }
  for (int j = 1; j <= m; ++j) {
    int last = 0;
    for (int i = n; i >= 1; --i) {
      if (g[i][j] != '.') {
        if (last != 0) {
          D[i][j] = make_pair(last, j);
        }
        last = i;
      }
    }
  }
  int ans = 0, count = 0;
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      if (g[i][j] != '.') {
        LL = L;
        RR = R;
        UU = U;
        DD = D;
        int cur = search(i, j);
        if (cur == ans) {
          ++count;
        } else if (cur > ans) {
          ans = cur;
          count = 1;
        }
      }
    }
  }
  printf("%d %d\n", ans, count);
  return 0;
}
