#include<bits/stdc++.h>
#include<algorithm>
#include<math.h>
#include<string>
#include<iostream>
#include<vector>
#include<cstdlib>
using namespace std;
 
template <class T> using V = vector<T>;
 
template<class T> inline bool chmin(T& a, T b) {
    if (a > b) {
        a = b;
        return true;
    }
    return false;
}
template<class T> inline bool chmax(T& a, T b) {
    if (a < b) {
        a = b;
        return true;
    }
    return false;
}
 
const long long INF = 1LL << 60;
 
using ll = long long;
using db = double;
using st = string;
using ch = char;
using bl = bool;
using vll = V<ll>;
using vpll =V<pair<ll,ll>>;
using vst = V<st>;
using vdb = V<db>;
using vch = V<ch>;
using vbl = V<bl>;

 
#define FOR(i,a,b) for(ll i=(a);i<(b);i++)
#define rFOR(i,a,b) for(ll i=(a);i>=(b);i--)
#define oFOR(i,a,b) for(ll i=(a);i<(b);i+=2)
#define bgn begin()
#define en end()
#define SORT(a) sort((a).bgn,(a).en)
#define REV(a) reverse((a).bgn,(a).en)
#define M(a,b) max(a,b)
#define rM(a,b) min(a,b)
#define fi first
#define se second
#define sz size()
#define gcd(a,b) __gcd(a,b)
#define co(a) cout<<a<<endl;
#define ci(a) cin>>a;
  
 

ll sum(ll n) {
ll m=0;
  while(n){
    m+=n%10;
    n/=10;
  }
  return m;
}
 
 
const int MAX = 510000;
const int MOD = 1000000007;
 
long long fac[MAX], finv[MAX], inv[MAX];
 
void Comuse() {
    fac[0] = fac[1] = 1;
    finv[0] = finv[1] = 1;
    inv[1] = 1;
    for (int i = 2; i < MAX; i++){
        fac[i] = fac[i - 1] * i % MOD;
        inv[i] = MOD - inv[MOD%i] * (MOD / i) % MOD;
        finv[i] = finv[i - 1] * inv[i] % MOD;
    }
}
 
 
#define comuse Comuse()
 
ll combi(int n, int k){
    if (n < k) return 0;
    if (n < 0 || k < 0) return 0;
    return fac[n] * (finv[k] * finv[n - k] % MOD) % MOD;
}
 
 
 
 
ll lcm(ll a,ll b){
  ll n;
  n=a/gcd(a,b)*b;
  return n;
}




 
/****************************************\
| Thank you for viewing my code:)        |
| Written by RedSpica a.k.a. RanseMirage |
| Twitter:@asakaakasaka                  | 
\****************************************/
 
 
signed main() {
  ll h,w; 
    cin>>h>>w;
  vst A(h);
  FOR(i,0,h){
    cin>>A[i];
  }
  vector<vector<int>> U(h,vector<int>(w));//これより上にいくつあきがあるか ok
  vector<vector<int>> D(h,vector<int>(w));//これより下にいくつあきがあるか ok
  vector<vector<int>> L(h,vector<int>(w));//これより左にいくつあきがあるか ok
  vector<vector<int>> R(h,vector<int>(w));//これより右にいくつあきがあるか ok

  FOR(i,0,h){
    ll count=0;
      FOR(j,0,w){
        if(A[i][j]=='.'){
          L[i][j]=count;
          count++;
        }
        else{
          count=0;
          L[i][j]=count;
        }
      }
  }
//ok

  FOR(i,0,h){
    ll count=0;
      rFOR(j,w-1,-1){
        if(A[i][j]=='.'){
          R[i][j]=count;
          count++;
        }
        else{
          count=0;
          R[i][j]=count;
        }       
      }   
  }
//ok

  FOR(i,0,w){
    ll count=0;
      FOR(j,0,h){
        if(A[j][i]=='.'){
          U[j][i]=count;
          count++;
        }
        else{
          count=0;
          U[j][i]=count;
        }
      }
  }
//ok
REV(A);
FOR(i,0,w){
  ll count=0;
  FOR(j,0,h){
    if(A[j][i]=='.'){
    D[j][i]=count;
    count++;
    }
    else{
      count=0;
      D[j][i]=count;
    }
  }
}
//ok
  int ans=0;
  FOR(i,0,h){
    FOR(j,0,w){
      int now=U[i][j]+D[h-i-1][j]+R[i][j]+L[i][j]+1;
      chmax(ans,now);
    }
  }
  cout<<ans<<"\n";
}

Measured memory_bytes: 67200