#include<bits/stdc++.h>
using namespace std;
const int N=110;
char s[N][N];
int n,m,x,y,ans,cnt[N][N],dp0[N][N][N],dp1[N][N][N];
void bemax(int &x,int v){
	if (x<v) x=v;
	if (ans<v) ans=v;
}
int count(int x1,int y1,int x2,int y2){
	return cnt[x2][y2]-cnt[x2][y1-1]-cnt[x1-1][y2]+cnt[x1-1][y1-1];
}
int main()
{
	scanf("%d%d",&n,&m);
	for (int i=1;i<=n;i++) scanf("%s",s[i]+1);
	for (int i=1;i<=n;i++)
	for (int j=1;j<=m;j++){
		cnt[i][j]=cnt[i-1][j]+cnt[i][j-1]-cnt[i-1][j-1]+(s[i][j]=='o');
		if (s[i][j]=='E') x=i,y=j;
	}
	for (int a=0;a<=x-1;a++){
		for (int b=0;b<=n-x;b++)
		for (int c=0;c<=y-1;c++)
		for (int d=0;d<=m-y;d++)
			dp1[b][c][d]=0;
		for (int b=0;b<=n-x;b++)
		for (int c=0;c<=y-1;c++)
		for (int d=0;d<=m-y;d++){
			int v=dp0[b][c][d];
			int lx=max(x-a,b+1),ly=max(y-c,d+1),rx=min(x+b,n-a),ry=min(y+d,m-c);
			if (x-a-1>b) bemax(dp1[b][c][d],v+count(x-a-1,ly,x-a-1,ry));
			if (x+b+1<n-a+1) bemax(dp0[b+1][c][d],v+count(x+b+1,ly,x+b+1,ry));
			if (y-c-1>d) bemax(dp0[b][c+1][d],v+count(lx,y-c-1,rx,y-c-1));
			if (y+d+1<m-c+1) bemax(dp0[b][c][d+1],v+count(lx,y+d+1,rx,y+d+1));
		}
		for (int b=0;b<=n-x;b++)
		for (int c=0;c<=y-1;c++)
		for (int d=0;d<=m-y;d++)
			dp0[b][c][d]=dp1[b][c][d];
	}
	printf("%d\n",ans);
	return 0;
}