#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int res,ad,n,m,ll,rr,uu,dd,L,R,U,D,sx,sy,dp[105][105][105],row[105][105],col[105][105];
char s[105][105];
int main()
{
    memset(dp,-1,sizeof dp);
    dp[0][0][0]=0;
    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) {
            row[i][j]+=row[i][j-1]+(s[i][j]=='o');
            col[i][j]+=col[i-1][j]+(s[i][j]=='o');
            if (s[i][j]=='E')
                sx=i,sy=j;
        }
    L=sy-1,R=m-sy,U=sx-1,D=n-sx;
    for (int l=0;l<=L;++l)
        for (int r=0;r<=R;++r)
            for (int u=0;u<=U;++u)
                for (int d=0;d<=D;++d) {
                    if (dp[r][u][d]==-1)
                        continue;
                    res=max(res,dp[r][u][d]);
                    ll=max(sy-l,r+1);
                    rr=min(sy+r,m-l);
                    dd=max(sx-u,d+1);
                    uu=min(sx+d,n-u);
                    if (u+d<D) {
                        ad=row[sx+d+1][rr]-row[sx+d+1][ll-1];
                        dp[r][u][d+1]=max(dp[r][u][d+1],dp[r][u][d]+ad);
                    }
                    if (u+d<U) {
                        ad=row[sx-u-1][rr]-row[sx-u-1][ll-1];
                        dp[r][u+1][d]=max(dp[r][u+1][d],dp[r][u][d]+ad);
                    }
                    if (l+r<R) {
                        ad=col[uu][sy+r+1]-col[dd-1][sy+r+1];
                        dp[r+1][u][d]=max(dp[r+1][u][d],dp[r][u][d]+ad);
                    }
                    if (l+r<L) {
                        ad=col[uu][sy-l-1]-col[dd-1][sy-l-1];
                        dp[r][u][d]=max(dp[r][u][d],dp[r][u][d]+ad);
                    }
                }
    printf("%d\n",res);
    return 0;
}