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.*;


        public class Main {
         static byte[][] a=new byte[5001][5001];
         static short[][] col=new short[5001][5001];
         static short[][] points=new short[5001][5001];
         static int kol;
         static short n;
         static short m;
         static int max=0;
         static short nmax=0;
         static boolean q;
         
         static void dfs(int i,int j,int k) {
             int g;
             if (a[i][j]==0|q) return;
             col[i][j]=(short)kol;
             if (k>max) {max=k;nmax=1;} else if (k==max) {nmax++;}
             if (points[i][j]==k) {nmax++;q=true;return;} else if (points[i][j]>k) {q=true;return;} else points[i][j]=(short)k;
             
             if (a[i][j]==4)
                 for (g=j+1;g<=m;g++)
                     if (a[i][g]!=0&col[i][g]!=kol) {dfs(i,g,k+1);break;}

             if (a[i][j]==3)
                 for (g=j-1;g>=1;g--)
                     if (a[i][g]!=0&col[i][g]!=kol) {dfs(i,g,k+1);break;}        
             
             if (a[i][j]==1)
                 for (g=i-1;g>=1;g--)
                     if (a[g][j]!=0&col[g][j]!=kol) {dfs(g,j,k+1);break;}  
             
             if (a[i][j]==2)
                 for (g=i+1;g<=n;g++)
                     if (a[g][j]!=0&col[g][j]!=kol) {dfs(g,j,k+1);break;}          
                                 
         }
         
         public static void main(String[] args) throws FileNotFoundException {
             Scanner in=new Scanner(/*new FileReader("input.txt"));*/System.in);
              n=in.nextShort();
              m=in.nextShort();
               String s = in.nextLine();
                for (int i = 1; i <= n; i++) {
                    s = in.nextLine();
                    for (int j = 1; j <= m; j++) {
                        if (s.charAt(j - 1)=='U') a[i][j]=1; else if (s.charAt(j - 1)=='D') a[i][j]=2;
                         else if (s.charAt(j - 1)=='L') a[i][j]=3; else if (s.charAt(j - 1)=='R') a[i][j]=4; else 
                             a[i][j]=0;
                    }
                }//считана          

               
            for (short i=1;i<=n;i++)
                for (short j=1;j<=m;j++) {
                    short g=1;
                    q=false;
                    kol=(i-1)*m+j;
                    dfs(i,j,g);
                }
           
               
                System.out.println(max+" "+nmax);
               
            }

        }