#include<bits/stdc++.h>

#define pb push_back
#define mp make_pair
#define fi first
#define se second

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

bool chkmax(int &x,int y){return x<y?x=y,true:false;}
bool chkmin(int &x,int y){return x>y?x=y,true:false;}

int readint(){
	int x=0,f=1; char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}

int n,m,ans;
char a[105][105];
int s[105][105],d[105][105][105][105];

int sum(int lx,int rx,int ly,int ry){return (lx<=rx&&ly<=ry?s[rx][ry]-s[rx][ly-1]-s[lx-1][ry]+s[lx-1][ly-1]:0);}

int main(){
	n=readint(); m=readint();
	for(int i=1;i<=n;i++) scanf("%s",a[i]+1);
	int tx=0,ty=0;
	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(a[i][j]=='E') tx=i,ty=j;
	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+(a[i][j]=='o');
	d[1][1][1][1]=0;
	for(int i=1;i<=tx;i++){
		for(int j=1;j<=n-tx+1;j++){
			for(int k=1;k<=ty;k++){
				for(int l=1;l<=m-ty+1;l++){
					int U=tx-i+1,D=tx+j-1,L=ty-k+1,R=ty+l-1;
//					cout<<"test "<<i<<' '<<j<<' '<<k<<' '<<l<<' '<<d[i][j][k][l]<<' '<<U<<' '<<D<<' '<<L<<' '<<R<<endl;
					if(U>1) chkmax(d[i+1][j][k][l],d[i][j][k][l]+(D-tx<U-1?sum(U-1,U-1,max(L,R-ty+1),min(R,m-ty+L)):0));
					if(D<n) chkmax(d[i][j+1][k][l],d[i][j][k][l]+(n-tx+U>=D+1?sum(D+1,D+1,max(L,R-ty+1),min(R,m-ty+L)):0));
					if(L>1) chkmax(d[i][j][k+1][l],d[i][j][k][l]+(R-ty<L-1?sum(max(U,D-tx+1),min(D,n-tx+U),L-1,L-1):0));
					if(R<m) chkmax(d[i][j][k][l+1],d[i][j][k][l]+(m-ty+L>=R+1?sum(max(U,D-tx+1),min(D,n-tx+U),R+1,R+1):0));
				}
			}
		}
	}
	cout<<d[tx][n-tx+1][ty][m-ty+1]<<endl;
	return 0;
}