#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const char infile[] = "input.in"; const char outfile[] = "output.out"; ifstream fin(infile); ofstream fout(outfile); const int MAXN = 105; const int oo = 0x3f3f3f3f; typedef vector Graph[MAXN]; typedef vector :: iterator It; const inline int min(const int &a, const int &b) { if( a > b ) return b; return a; } const inline int max(const int &a, const int &b) { if( a < b ) return b; return a; } const inline void Get_min(int &a, const int b) { if( a > b ) a = b; } const inline void Get_max(int &a, const int b) { if( a < b ) a = b; } int N, M, dp[MAXN][MAXN]; char s[MAXN][MAXN]; int main() { int Ans = 1; cin >> N >> M; memset(dp, -oo, sizeof(dp)); dp[0][0] = dp[1][0] = 0; dp[1][1] = 1; for(int i = 1 ; i <= N ; ++ i) cin >> (s[i] + 1); for(int i = 1 ; i <= N ; ++ i) { for(int j = 1 ; j <= M ; ++ j) { if(s[i][j] == '.') { dp[i][j] = max(dp[i-1][j], dp[i][j - 1]) + 1; Ans = max(Ans, dp[i][j]); } //cout << dp[i][j] << ' '; } //cout << "\n"; } cout << Ans << '\n'; fin.close(); fout.close(); return 0; }