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; 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 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; end; end; begin citire; max:=0; bak(1,1,1); writeln(max); end.