var v:array[1..100,1..100] of char;
    max,n,m:integer;



 procedure citire;
 var i,j:byte;
 begin

  readln(n,m);

  for i:=1 to n do
      begin
       for j:=1 to m do
           read(v[i,j]);
       readln;
      end;
 end;



 procedure afisare (nr:byte);
 var i,j:byte;
 begin

  if nr>max then max:=nr;

{  for i:=1 to n do
      begin
       for j:=1 to m do
           write(v[i,j]);
       writeln;
      end;

  writeln('nr=',nr); writeln;}

 end;



 function inchis (x,y:byte):boolean;
 begin

  if ((x=n) and (v[x,y+1]<>'.'))
  or ((v[x+1,y]<>'.') and (v[x,y+1]<>'.')) then inchis:=true
                              else inchis:=false;
 end;



 function valid (x,y:byte):boolean;
 begin

  if (x in [1..n]) and (y in [1..m]) then valid:=true else valid:=false;
 end;



 procedure bak (x,y,nr:byte);
 begin

  if v[x,y]='.' then begin
     v[x,y]:='1';
     if inchis(x,y) then afisare(nr)
                    else begin
                         if valid(x+1,y) then bak(x+1,y,nr+1);
                         if valid(x,y+1) then bak(x,y+1,nr+1);
                         end;
     v[x,y]:='.';
     end;
 end;


begin
 citire;
 max:=0;
 bak(1,1,1);
 writeln(max);
end.