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.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class CounterGame {

	
	char[][] data;
	char D = "D".charAt(0);
	char U = "U".charAt(0);
	char L = "L".charAt(0);
	char R = "R".charAt(0);
	char point = ".".charAt(0);
	int n,m;
	int bestResult;
	int bestResultNumber;
	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		CounterGame task = new CounterGame();
		task.getData();
		task.run();
	}
	
	
	void run(){
		char[][] dataTemp;
		int result = 0;
		for(int i=0;i<n;i++){
			for(int j=0;j<m;j++){
				dataTemp = copyData();
				result = getResult(dataTemp,i,j);
				if(result>bestResult){
					bestResult = result;
					bestResultNumber = 1;
				}else if(result == bestResult){
					bestResultNumber++;
				}
			}
		}
		System.out.println(bestResult + " " + bestResultNumber);
	}
	
	int getResult(char[][] dataTemp, int x, int y){
		int result = 1;
		char current = dataTemp[x][y];
		dataTemp[x][y]=point;
		if(current==U){
			//search to up
			for(int i=x-1;i>=0;i--){
				if(dataTemp[i][y]!=point){
					
					result = result+getResult(dataTemp,i,y);
					break;
				}
			}
			
		} else if(current==D){
			//search to up
			for(int i=x+1;i<n;i++){
				if(dataTemp[i][y]!=point){
					
					result = result+getResult(dataTemp,i,y);
					break;
				}
			}
			
		}else if(current==L){
			//search to up
			for(int i=y-1;i>=0;i--){
				if(dataTemp[x][i]!=point){
					
					result = result+getResult(dataTemp,x,i);
					break;
				}
			}
			
		}else if(current==R){
			//search to up
			for(int i=y+1;i<m;i++){
				if(dataTemp[x][i]!=point){
					
					result = result+getResult(dataTemp,x,i);
					break;
				}
			}
			
		}
		
		return result;
	}
	
	
	
	void getData() throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String str = br.readLine();
		String[] strs = str.split("\\s");
		n = Integer.parseInt(strs[0]);
		m = Integer.parseInt(strs[1]);
		data = new char[n][m];
		for(int i=0;i<n;i++){
			str = br.readLine();
			
			for(int j=0;j<m;j++){
				data[i][j] = str.charAt(j);
			}
		}
	}
	
	char[][] copyData(){
		char[][] dataCopy = new char[n][m];
		for(int i=0;i<n;i++){
			for(int j=0;j<m;j++){
				dataCopy[i][j] = data[i][j];
			}
		}
		return dataCopy;
	}
}
