#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
const int Maxn = 110;
int f[2][Maxn][Maxn][Maxn];
int n, m;
int stx, sty;
char s[Maxn][Maxn];
int a[Maxn][Maxn], row[Maxn][Maxn], col[Maxn][Maxn]; 
void up(int &x, int y) { if(x < y) x = y; }
int _max(int x, int y) { return x > y ? x : y; }
int _min(int x, int y) { return x < y ? x : y; }
int getr(int x, int l, int r) {
	int L = _max(sty-l, r+1), R = _min(sty+r, m-l);
	return L > R ? 0 : row[x][R] - row[x][L-1];
}
int getc(int y, int u, int d) {
	int U = _max(stx-u, d+1), D = _min(stx+d, n-u);
	return U > D ? 0 : col[D][y] - col[U-1][y];
}
int main() {
	int i, j, k;
	scanf("%d%d", &n, &m);
	for(i = 1; i <= n; i++) scanf("%s", s[i]+1);
	for(i = 1; i <= n; i++) for(j = 1; j <= m; j++){
		if(s[i][j] == 'o') a[i][j] = 1;
		if(s[i][j] == 'E') stx = i, sty = j;
	}
	for(i = 1; i <= n; i++){
		for(j = 1; j <= m; j++) row[i][j] = row[i][j-1]+a[i][j], col[i][j] = col[i-1][j]+a[i][j];
	}
	int st = 0, ans = 0;;
	for(int t = 1; t <= n+m; t++){
		st ^= 1;
		for(i = 0; i < stx; i++){
			for(j = 0; j <= n-stx; j++){
				for(k = 0; k < sty; k++){
					up(ans, f[st^1][i][j][k]);
					f[st][i][j][k] = 0;
				}
			}
		}
		for(i = 0; i < stx; i++){
			for(j = 0; j <= n-stx; j++){
				for(k = 0; k < sty; k++){
					int x = t-1-i-j-k;
					if(x < 0 || x > m-sty) continue;
					if(stx-i-1 > j) up(f[st][i+1][j][k], f[st^1][i][j][k]+getr(stx-i-1, k, x));
					if(stx+j+1 <= n-i) up(f[st][i][j+1][k], f[st^1][i][j][k]+getr(stx+j+1, k, x));
					if(sty-k-1 > x) up(f[st][i][j][k+1], f[st^1][i][j][k]+getc(sty-k-1, i, j));
					if(sty+x+1 <= m-k) up(f[st][i][j][k], f[st^1][i][j][k]+getc(sty+x+1, i, j));
				}
			}
		}
	}
	for(i = 0; i < stx; i++){
		for(j = 0; j <= n-stx; j++){
			for(k = 0; k < sty; k++){
				up(ans, f[st][i][j][k]);
			}
		}
	}
	printf("%d\n", ans);
	return 0;
}