#include<bits/stdc++.h>
#define N 105
using namespace std;
int n,m,x,y,f[N][N][N],g[N][N][N],r[N][N],c[N][N]; char st[N];
void maxself(int &x,int y){ x=max(x,y);}
int main()
{
	int i,j,k,l;
	scanf("%d %d\n",&n,&m);
	for(i=1;i<=n;i++){
		scanf("%s",st+1);
		for(j=1;j<=m;j++){
			c[j][i]=c[j][i-1],r[i][j]=r[i][j-1];
			if(st[j]=='E') x=i,y=j;
			if(st[j]=='o') r[i][j]++,c[j][i]++;
		  }
	  }
	for(i=0;i<x;i++){
		memcpy(g,f,sizeof(g));
		memset(f,0,sizeof(f));
		for(j=0;j<=n-x;j++)
			for(k=0;k<y;k++)
				for(l=0;l<=m-y;l++){
					maxself(f[j][k][l],g[j][k][l]+(x-i-1>j ? r[x-i-1][min(y+l,m-k)]-r[x-i-1][max(y-k-1,l)] : 0));
					maxself(g[j+1][k][l],g[j][k][l]+(x+j+1<=n-i ? r[x+j+1][min(y+l,m-k)]-r[x+j+1][max(y-k-1,l)] : 0));
					maxself(g[j][k+1][l],g[j][k][l]+(y-k-1>l ? c[y-k-1][min(x+j,n-i)]-c[y-k-1][max(x-i-1,j)] : 0));
					maxself(g[j][k][l+1],g[j][k][l]+(y+l+1<=m-k ? c[y+l+1][min(x+j,n-i)]-c[y+l+1][max(x-i-1,j)] : 0));
				  }
	  }
	cout<<g[n-x][y-1][m-y];
	return 0;
}
