#include <bits/stdc++.h>
using namespace std;

const int DIM = 1e2 + 5;

char arr[DIM][DIM];
int dp[DIM][DIM][DIM][DIM], psm[DIM][DIM];

inline int sum( int x1, int y1, int x2, int y2 ) {
    return psm[x2][y2] - psm[x1 - 1][y2] - psm[x2][y1 - 1] + psm[x1 - 1][y1 - 1];
}

int main( void ) {
    
    int n, m;
    cin >> n >> m;
    
    int px = 0, py = 0;
    for( int i = 1; i <= n; i ++ ) {
        cin >> ( arr[i] + 1 );
    
        for( int j = 1; j <= m; j ++ ) {
            psm[i][j] = psm[i - 1][j] + psm[i][j - 1] - psm[i - 1][j - 1] + ( arr[i][j] == 'o' );
            
            if( arr[i][j] == 'E' ) {
                px = i;
                py = j;
            }
        }
    }
    
    for( int l = 0; l <= py - 1; l ++ ) {
    for( int r = 0; r <= m - py; r ++ ) {
    for( int u = 0; u <= px - 1; u ++ ) {
    for( int d = 0; d <= n - px; d ++ ) {
        dp[l + 1][r][u][d] = max( dp[l + 1][r][u][d], dp[l][r][u][d] + ( ( r + 1 <= py - l - 1 ) ? sum( max( px - u, d + 1 ), py - l - 1, min( px + d, n - u ), py - l - 1 ) : 0 ) );
        dp[l][r + 1][u][d] = max( dp[l][r + 1][u][d], dp[l][r][u][d] + ( ( py + r + 1 <= m - l ) ? sum( max( px - u, d + 1 ), py + r + 1, min( px + d, n - u ), py + r + 1 ) : 0 ) );
        dp[l][r][u + 1][d] = max( dp[l][r][u + 1][d], dp[l][r][u][d] + ( ( d + 1 <= px - u - 1 ) ? sum( px - u - 1, max( py - l, r + 1 ), px - u - 1, min( py + r, m - l ) ) : 0 ) );
        dp[l][r][u][d + 1] = max( dp[l][r][u][d + 1], dp[l][r][u][d] + ( ( px + d + 1 <= n - u ) ? sum( px + d + 1, max( py - l, r + 1 ), px + d + 1, min( py + r, m - l ) ) : 0 ) );
    } } } }
 
    cout << dp[py - 1][m - py][px - 1][n - px] << endl;
    return 0;
}