#include<bits/stdc++.h>
using namespace std;

template<class I> I chmax(I &x, I y) { return x < y ? x = y : x; }
template<class I> I chmin(I &x, I y) { return x > y ? x = y : x; }

char s[103];
short F[103][103][103][103];
short s1[103][103], s2[103][103];

int main()
{
	int n, m, tx = 0, ty = 0;
	scanf("%d%d", &n, &m);
	for(int i = 1; i <= n; i++)
	{
		scanf("%s", s + 1);
		for(int j = 1; j <= m; j++)
		{
			s1[i][j] = s1[i][j - 1] + (s[j] == 'o');
			s2[i][j] = s2[i - 1][j] + (s[j] == 'o');
			if(s[j] == 'E') tx = i, ty = j;
		}
	}
	int limu = tx - 1, limd = n - tx;
	int liml = ty - 1, limr = m - ty;
	for(int u = 0; u <= limu; u++)
	for(int d = 0; d <= limd; d++)
	for(int l = 0; l <= liml; l++)
	for(int r = 0; r <= limr; r++)
	{
		int L = max(ty - l, r + 1), R = min(ty + r, m - l);
		if(L <= R)
		{
			chmax(F[u + 1][d][l][r], (short) (F[u][d][l][r] + (tx - u - 1 >= d + 1 ? s1[tx - u - 1][R] - s1[tx - u - 1][L - 1] : (short) 0)));
			chmax(F[u][d + 1][l][r], (short) (F[u][d][l][r] + (tx + d + 1 <= n - u ? s1[tx + d + 1][R] - s1[tx + d + 1][L - 1] : (short) 0)));
		}
		L = max(tx - u, d + 1), R = min(tx + d, n - u);
		if(L <= R)
		{
			chmax(F[u][d][l + 1][r], (short) (F[u][d][l][r] + (ty - l - 1 >= r + 1 ? s2[R][ty - l - 1] - s2[L - 1][ty - l - 1] : (short) 0)));
			chmax(F[u][d][l][r + 1], (short) (F[u][d][l][r] + (ty + r + 1 <= m - l ? s2[R][ty + r + 1] - s2[L - 1][ty + r + 1] : (short) 0)));
		}
	}
	printf("%d\n", F[limu][limd][liml][limr]);
	return 0;
}
