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

import java.io.*;
import java.util.*;
import java.util.concurrent.CountDownLatch;

public class Chip_Play {
    static int[][] chips = new int[5000][5000];
    static char[][] grid = new char[5000][5000];
    static int n, m;
    public static void getChips(int x, int y) {
        if(chips[x][y] != -1) return;
        if(chips[x][y] == '.') { chips[x][y] = 0; return; }
        int dx = 0, dy = 0;
        if(grid[x][y] == 'U') dy = -1;
        else if(grid[x][y] == 'D') dy = +1;
        if(grid[x][y] == 'L') dx = -1;
        else if(grid[x][y] == 'R') dy = +1;
        int x1, y1;
        if (dx == 0) {
            for(int i = y + dx; i < m && i >=0; i += dx) {
                if(grid[x][i] == grid[x][y]) {
                    chips[x][y] = Math.min(chips[x][y], 1 + chips[x][i]);
                    return;
                }
            }
        }
        else {
            for(int i = x + dy; i < n && i >=0; i += dy) {
                if(grid[i][y] == grid[x][y]) {
                    chips[x][y] = Math.min(chips[x][y], 1 + chips[i][y]);
                    return;
                }
            }
        }
    }
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());
        for(int i = 0; i < n; ++i) {
            grid[i] = br.readLine().toCharArray();
            Arrays.fill(chips[i], -1);
        }
        int max = 0;
        for(int i = 0; i < n; ++i)
            for(int j = 0; j < m; ++j) {
                getChips(i, j);
                max = Math.max(max, chips[i][j]);
            }
        int count = 0;
        for(int i = 0; i < n; ++i)
            for(int j = 0; j < m; ++j)
                if(max == chips[i][j])
                    ++count;
        System.out.println(max+" "+count);
    }
}
