//Code by Patcas Csaba #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define LL long long #define PII pair #define VB vector #define VI vector #define VD vector #define VS vector #define VPII vector > #define VVI vector < VI > #define VVB vector < VB > #define FORN(i, n) for(int i = 0; i < (n); ++i) #define FOR(i, a, b) for(int i = (a); i <= (b); ++i) #define FORD(i, a, b) for(int i = (a); i >= (b); --i) #define REPEAT do{ #define UNTIL(x) }while(!(x)); #define SZ size() #define BG begin() #define EN end() #define CL clear() #define X first #define Y second #define RS resize #define PB push_back #define MP make_pair #define ALL(x) x.begin(), x.end() #define in_file "a.in" #define out_file "a.out" int n, m; VVI dp; VS a; int solve(int i, int j) { if (i > n || j > m) return 0; if (a[i][j] == '&') return dp[i][j] = 0; if (dp[i][j] != -1) return dp[i][j]; int v1 = solve(i + 1, j); int v2 = solve(i, j + 1); return dp[i][j] = max(v1, v2) + 1; } int main() { //Read data //freopen(in_file, "r", stdin); //freopen(out_file, "w", stdout); cin >> n >> m; a.RS(n + 1), dp.RS(n + 1, VI(m + 1, -1)); FOR(i, 1, n) { a[i] += "X"; FOR(j, 1, m) { char ch; cin >> ch; a[i] += ch; } } //Solve FOR(i, 1, n) FOR(j, 1, m) if (dp[i][j] == -1) { dp[i][j] = solve(i, j); } //Write data cout << dp[1][1]; return 0; }