#include struct Coada{int l; int c;int d;}; char a[110][110], c; int b[110][110]; int n, m, i, j, nr,max; int dx[]={0, 0, 1}; int dy[]={0, 1, 0}; void LEE(int x, int y) { Coada C[10010], X; int ic, sf, l9, c9,k; ic=sf=1; C[ic].l=x; C[ic].c=y; C[ic].d=1; while(ic<=sf) { X=C[ic++]; nr=X.d; for(k=1;k<=2;k++) { l9=X.l+dx[k]; c9=X.c+dy[k]; if((a[l9][c9]=='.')&&(!b[l9][c9])) { C[++sf].l=l9; C[sf].c=c9; C[sf].d=X.d+1; b[l9][c9]=1; } } } } void bordare() { int i, j; for(i=0;i<=n+1;i++) b[i][0]=b[i][m+1]=1; for(j=0;j<=m+1;j++) b[0][j]=b[n+1][j]=1; } void curata() { int i, j; for(i=1;i<=n;i++) for(j=1;j<=m;j++) b[i][j]=0; } int main() { scanf("%d%d\n", &n, &m); bordare(); for(i=1;i<=n;i++) { for(j=1;j<=m;j++) scanf("%c", &a[i][j]); scanf("%c", &c); } max=0; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { if(a[i][j]=='.')\ { nr=1; LEE(i, j); if(nr>max) max=nr; curata(); } } } printf("%d", max); return 0; }