#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define ULL unsigned long long
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define pll pair<LL,LL>
#define x first
#define y second
#define pi acos(-1)
#define sqr(x) ((x)*(x))
#define pdd pair<double,double>
#define MEMS(x) memset(x,-1,sizeof(x))
#define MEM(x) memset(x,0,sizeof(x))
#define less Less
#define EPS 1e-4
#define arg ARG
#define cpdd const pdd
#define rank Rank
#define KK 500
#define N 100005
#define MXN 200005
short dp[105][105][105][105];
int sum[105][105];
pii p;
int h,w;
int get(int a,int b,int c,int d){
   // printf("%d %d %d %d\n",a,b,c,d);
    if(a>c||b>d)return 0;
    return sum[c][d]+sum[a-1][b-1]-sum[a-1][d]-sum[c][b-1];
}
int DP(int a,int b,int c,int d){
    if(dp[a][b][c][d]!=-1)return dp[a][b][c][d];
    if(p.x<a||p.x>c||p.y<b||p.y>d)return 0;
  //  printf("%d %d %d %d\n",a,b,c,d);
    dp[a][b][c][d]=max((int)dp[a][b][c][d],DP(a+1,b,c,d)+get(max(a,c-p.x+1),max(b,d-p.y+1),min(a,h-(p.x-a-1)),min(d,w-(p.y-b))));
    dp[a][b][c][d]=max((int)dp[a][b][c][d],DP(a,b,c-1,d)+get(max(c,c-1-p.x+1),max(b,d-p.y+1),min(c,h-(p.x-a)),min(d,w-(p.y-b))));
    dp[a][b][c][d]=max((int)dp[a][b][c][d],DP(a,b+1,c,d)+get(max(a,c-p.x+1),max(b,d-p.y+1),min(c,h-(p.x-a)),min(b,w-(p.y-b-1))));
    dp[a][b][c][d]=max((int)dp[a][b][c][d],DP(a,b,c,d-1)+get(max(a,c-p.x+1),max(d,d-1-p.y+1),min(c,h-(p.x-a)),min(d,w-(p.y-b))));
    return dp[a][b][c][d];
}
int main(){
 //   int h,w;
    scanf("%d %d",&h,&w);
    char c[105][105];
    MEMS(dp);
    for(int i=1;i<=h;i++){
        scanf("%s",c[i]+1);
        for(int j=1;j<=w;j++){
            if(c[i][j]=='o')sum[i][j]++;
            if(c[i][j]=='E')dp[i][j][i][j]=0,p=mp(i,j);
            sum[i][j]+=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
        }
    }
    printf("%d\n",DP(1,1,h,w));
}
