#include <bits/stdc++.h>

using namespace std;
#define X first
#define Y second
#define pb push_back
typedef double db;
typedef long long ll;
typedef pair<int,int> P;
const int MAXN=101;
char s[MAXN][MAXN];
int n,m,x,y;
short dp[MAXN][MAXN][MAXN][MAXN];
short line[MAXN][MAXN],col[MAXN][MAXN];
void upd(short &a,short b){a=max(a,b);}

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') x=i,y=j;
			line[i][j]=line[i][j-1]+(s[i][j]=='o');
			col[i][j]=col[i-1][j]+(s[i][j]=='o');
		}
	}
	
	short res=0;
	dp[0][0][0][0]=0;
	for(int u=0;u<x;u++) for(int d=0;d<=n-x;d++)
		for(int l=0;l<y;l++) for(int r=0;r<=m-y;r++)
		{
			if(!(u+d<max(x,n-x+1)&&l+r<max(y,m-y+1))) continue;	
			short &cur=dp[u][d][l][r];res=max(res,cur);
			int L=max(r+1,y-l),R=min(y+r,m-l),D=min(x+d,n-u),U=max(x-u,d+1);
			if(u+1+d<x) upd(dp[u+1][d][l][r],cur+line[x-u-1][R]-line[x-u-1][L-1]);
			if(d+1+u<=n-x) upd(dp[u][d+1][l][r],cur+line[x+d+1][R]-line[x+d+1][L-1]);
			if(l+1+r<y) upd(dp[u][d][l+1][r],cur+col[D][y-l-1]-col[U-1][y-l-1]);
			if(r+1+l<=m-y) upd(dp[u][d][l][r+1],cur+col[D][y+r+1]-col[U-1][y+r+1]);
		}
	printf("%d",res);
	return 0;
}