#include<bits/stdc++.h>

#define sorted(vector) sort(vector.begin(),vector.end())
#define vmin(vector) *min_element(vector.begin(),vector.end())
#define vmax(vector) *max_element(vector.begin(),vector.end())
#define vsum(vector) accumulate(vector.begin(),vector.end(),0)
#define append(a) push_back(a)
#define int(a) stoi(a)
#define str(a) to_string(a)
#define bisect_left(vector,a) lower_bound(vector.begin(),vector.end(),a)
#define bisect_right(vector,a) upper_bound(vector.begin(),vector.end(),a)

using namespace std;

int main(void){
    int n,m;
    cin>>n>>m;
    string s;
    vector<vector<string>> grid2(n,vector<string>(m,"."));
    for(int i=0  ;i<n  ;i++){
        cin>>s;
        for(int j=0  ;j<m  ;j++){
            grid2[i][j]=s[j];
        }
    }
    vector<vector<int>> grid(n,vector<int>(m,0));
    for(int i=0  ;i<n  ;i++){
        for(int j=0  ;j<m  ;j++){
            grid[i][j]=(grid2[i][j]==".");
//            cout<<grid[i][j]<<" ";
        }
//        cout<<endl;
    }
    
    vector<vector<int>> gridleft(n,vector<int>(m,0));
    vector<vector<int>> gridright(n,vector<int>(m,0));
    vector<vector<int>> gridup(n,vector<int>(m,0));
    vector<vector<int>> griddown(n,vector<int>(m,0));
    
    for(int i=0  ;i<n  ;i++){
        gridright[i][0]=grid[i][0];
    }
    for(int i=0  ;i<n  ;i++){
        for(int j=1  ;j<m  ;j++){
            if (grid[i][j]){
                gridright[i][j]=gridright[i][j-1]+1;
            }else{
                gridright[i][j]=0;
            }
        }
    }
    for(int i=0  ;i<n  ;i++){
        gridleft[i][m-1]=grid[i][m-1];
    }
    for(int i=0  ;i<n  ;i++){
        for(int j=m-2  ;j>=0  ;j--){
            if (grid[i][j]){
                gridleft[i][j]=gridleft[i][j+1]+1;
            }else{
                gridleft[i][j]=0;
            }
        }
    }

    for(int j=0  ;j<m  ;j++){
        griddown[0][j]=grid[0][j];
    }
    for(int j=0  ;j<m  ;j++){
        for(int i=1  ;i<n  ;i++){
            if (grid[i][j]){
                griddown[i][j]=griddown[i-1][j]+1;
            }else{
                griddown[i][j]=0;
            }
        }
    }
    for(int j=0  ;j<m  ;j++){
        gridup[n-1][j]=grid[n-1][j];
    }
    for(int j=0  ;j<m  ;j++){
        for(int i=n-2  ;i>=0  ;i--){
            if (grid[i][j]){
                gridup[i][j]=gridup[i+1][j]+1;
            }else{
                gridup[i][j]=0;
            }
        }
    }
    
    
    
//    for(int i=0  ;i<n  ;i++){
//        for(int j=0  ;j<m  ;j++){
//            cout<<gridleft[i][j]<<" ";
//        }
//        cout<<endl;
//    }
//    for(int i=0  ;i<n  ;i++){
//        for(int j=0  ;j<m  ;j++){
//            cout<<gridright[i][j]<<" ";
//        }
//        cout<<endl;
//    }
//    for(int i=0  ;i<n  ;i++){
//        for(int j=0  ;j<m  ;j++){
//            cout<<griddown[i][j]<<" ";
//        }
//        cout<<endl;
//    }
//    for(int i=0  ;i<n  ;i++){
//        for(int j=0  ;j<m  ;j++){
//            cout<<gridup[i][j]<<" ";
//        }
//        cout<<endl;
//    }
    vector<int> ans;
    for(int i=0  ;i<n  ;i++){
        for(int j=0  ;j<m  ;j++){
            ans.append(gridleft[i][j]+gridup[i][j]+gridright[i][j]+griddown[i][j]);
        }
    }
    cout<<vmax(ans)-3<<endl;
}

Measured memory_bytes: 316016