#include <bits/stdc++.h>
#define endl '\n'

using namespace std;

struct p{
    int i,j,d;
};

int n,m;
int di[4]={1,-1,0,0};
int dj[4]={0,0,1,-1};
int dist[1010][1010];
char mat[1010][1010];
bool visited[1010][1010];
queue<p>pozar;

bool moze(int i,int j){
    return (i>=0 && i<n && j>=0 && j<m && mat[i][j]!='*');
}

int stevfs(int si,int sj){
    //cerr<<"STEVA------------------------------------------"<<endl;
    queue<p> qu;
    qu.push({si,sj,1});
    int cnt=0;
    while(!qu.empty()){
        p x = qu.front();
        qu.pop();
        for(int i=0;i<4;i++){
            //cerr<<"Polje : ("<<x.i+di[i]<<", "<<x.j+dj[i]<<")"<<endl;
            if(!moze(x.i+di[i],x.j+dj[i]))continue;
            if(visited[x.i+di[i]][x.j+dj[i]])continue;
            //cerr<<"Moze sada da vidimo dist "<<dist[x.i+di[i]][x.j+dj[i]]<<" <=? "<<x.d+1<<endl;
            if(dist[x.i+di[i]][x.j+dj[i]]!=0 && x.d+1>=dist[x.i+di[i]][x.j+dj[i]])continue;
            cnt++;
            visited[x.i+di[i]][x.j+dj[i]]=true;
            qu.push({x.i+di[i],x.j+dj[i],x.d+1});
        }
    }
    return cnt;
}

void bfs(){
    while(!pozar.empty()){
        p x = pozar.front();
        //cerr<<"POZAR spread : ("<<x.i<<", "<<x.j<<") range = "<<x.d<<endl;
        pozar.pop();
        for(int i=0;i<4;i++){
            //cerr<<"proveravam polje : ("<<x.i+di[i]<<", "<<x.j+dj[i]<<")"<<endl;
            if(!moze(x.i+di[i],x.j+dj[i]))continue;
            //cerr<<"provera dista "<<dist[x.i+di[i]][x.j+dj[i]]<<endl;
            if(dist[x.i+di[i]][x.j+dj[i]]!=0)continue;
            dist[x.i+di[i]][x.j+dj[i]]=x.d+1;
            //cerr<<"Upisujem polje dist: "<<dist[x.i+di[i]][x.j+dj[i]]<<endl;
            pozar.push({x.i+di[i],x.j+dj[i],x.d+1});
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int si,sj;
    cin>>n>>m;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin>>mat[i][j];
            if(mat[i][j]=='*'||mat[i][j]=='.')continue;
            if(mat[i][j]=='X'){
                pozar.push({i,j,1});
                dist[i][j]=1;
            }
            else{
                si=i;
                sj=j;
            }
        }
    }
    bfs();
    cout<<stevfs(si,sj)<<endl;
    return 0;
}