/*input

*/
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/rope>

using namespace __gnu_pbds;
using namespace __gnu_cxx;
using namespace std;

#pragma GCC optimize("O3")
#pragma comment(linker, "/stack:200000000")
#pragma GCC optimize("unroll-loops")

#define F first
#define S second
#define mp make_pair
#define append push_back
#define mem(a,b) memset(a,b,sizeof(a))
#define ll long long int
#define pb push_back
#define print(a) cout<<a<<endl
#define gcd(a,b) __gcd((a),(b))
#define lcm(a,b) ((a)*(b))/gcd((a),(b))
#define all(x) x.begin(), x.end()
#define loop(i,n) for(int i = 0; i < n; i++)
#define getName(x) #x
#define debug(x) cerr<< getName(x) << ":" << x << endl;
//#define int long long int
 
const int MOD = 1e9 + 7;

int fastexpo(int x, int y) 
{ 
    int res = 1;
    x = x % MOD;
    while (y) 
    { 
        if (y & 1) res = (res*x) % MOD; 
        y = y>>1;
        x = (x*x) % MOD;   
    } 
    return res; 
}

int mod(int x, int y){
    return (x%y + y)%y;
}

void solve();

signed main(){
    
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int t = 1;
    //cin>> t;
    while(t--){
        solve();
    }

    cerr << "\nTime elapsed: " << 1000 * clock() / CLOCKS_PER_SEC << "ms\n";
    return 0;
}

void solve(){
    int n, m;
    cin>> n >> m;
    char grid[n+2][m+2];
    for(int i = 0; i <= n + 1; i++)
        for(int j = 0; j <= m + 1; j++)
            grid[i][j] = '#';
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++)
            cin>> grid[i][j];
    int dp1[n+2][m+2], dp2[n+2][m+2], dp3[n+2][m+2], dp4[n+2][m+2];
    for(int i = 0; i <= n; i++){
        for(int j = 0; j <= m; j++){
            dp1[i][j] = dp2[i][j] = n;
            dp3[i][j] = dp4[i][j] = m;
        }
    }
    for(int i = 0; i <= n; i++){
        for(int j = 0; j <= m; j++){
            if(grid[i][j] == '#'){
                dp1[i][j] = 0;
                dp2[i][j] = 0;
            }
            else{
                dp1[i][j] = dp1[i][j-1] + 1;
                dp2[i][j] = dp2[i-1][j] + 1;
            }
        }
    }
    for(int i = n+1; i >= 1; i--){
        for(int j = m+1; j >= 1; j--){
            if(grid[i][j] == '#'){
                dp3[i][j] = dp4[i][j] = 0;
            }
            else{
                dp3[i][j] = dp3[i+1][j] + 1;
                dp4[i][j] = dp4[i][j+1] + 1;
            }
        }
    }
   /* vector<pair<int, int> > v;
    for(int i = 0; i <= n+1; i++){
        for(int j = 0; j <= m+1; j++){
            if(grid[i][j] == '#'){
                v.append(mp(i, j));
                dp1[i][j] = dp2[i][j] = dp3[i][j] = dp4[i][j] = 0;
            }
        }
    }
    for(auto u : v){
        int x = u.F, y = u.S;
        for(int i = x+1; i <= n; i++){
            if(grid[i][y] == '#')
                break;
            dp1[i][y] = dp1[i-1][y] + 1;
        }
        for(int i = x - 1; i >= 1; i--){
            if(grid[i][y] == '#')
                break;
            dp2[i][y] = dp2[i+1][y] + 1;
        }
        for(int i = y + 1; i <= m; i++){
            if(grid[x][i] == '#')
                break;
            dp3[x][i] = dp3[x][i-1] + 1;
        }
        for(int i = y - 1; i >= 1; i--){
            if(grid[x][i] == '#')
                break;
            dp4[x][i] = dp4[x][i+1] + 1;
        }
    }*/
    int ans = 0;
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            ans = max(ans, dp1[i][j] + dp2[i][j] + dp3[i][j] + dp4[i][j]);
            //cout<< dp1[i][j] << ' ';
        }
        //cout<< endl;
    }
    print(ans-3);
}

Measured memory_bytes: 66816