#include <bits/stdc++.h>

using namespace std;

#define N 100

int n, m, ex, ey, sum1[N + 5][N + 5], sum2[N + 5][N + 5], ans;
char s[N + 5][N + 5];
vector<vector<vector<vector<int> > > > f;

int main() {
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= n; ++i) {
		scanf("%s", s[i] + 1);
		for (int j = 1; j <= m; ++j)
			if (s[i][j] == 'E')
				ex = i, ey = j;
	}
	f.resize(ex);
	for (int a = 0; a < ex; ++a) {
		f[a].resize(n - ex + 1);
		for (int b = 0; b <= n - ex; ++b) {
			f[a][b].resize(ey);
			for (int c = 0; c < ey; ++c)
				f[a][b][c].resize(m - ey + 1);
		}
	}
	for (int i = 1; i <= n; ++i)
		for (int j = 1; j <= m; ++j) {
			sum1[i][j] = sum1[i][j - 1] + (s[i][j] == 'o');
			sum2[i][j] = sum2[i - 1][j] + (s[i][j] == 'o');
		}
	for (int a = 0; a < ex; a++)
        for (int b = 0; b <= n - ex; b++)
            for (int c = 0; c < ey; c++)
                for (int d = 0; d <= m - ey; d++) {
                	int U = b + 1, D = n - a, L = d + 1, R = m - c;
                	ans = max(ans, f[a][b][c][d]);
                	if (U < ex - a)
                		f[a + 1][b][c][d] = max(f[a + 1][b][c][d], f[a][b][c][d] + sum1[ex - a - 1][min(R, ey + d)] - sum1[ex - a - 1][max(L, ey - c) - 1]);
                	if (D > ex + b)
                		f[a][b + 1][c][d] = max(f[a][b + 1][c][d], f[a][b][c][d] + sum1[ex + b + 1][min(R, ey + d)] - sum1[ex + b + 1][max(L, ey - c) - 1]);
					if (L < ey - c)
                        f[a][b][c + 1][d] = max(f[a][b][c + 1][d], f[a][b][c][d] + sum2[min(D, ex + b)][ey - c - 1] - sum2[max(U, ex - a) - 1][ey - c - 1]);
                    if (R > ey + d)
                        f[a][b][c][d + 1] = max(f[a][b][c][d + 1], f[a][b][c][d] + sum2[min(D, ex + b)][ey + d + 1] - sum2[max(U, ex - a) - 1][ey + d + 1]);
                }
    printf("%d\n", ans);
	return 0;
}