#ifndef _GLIBCXX_NO_ASSERT
#include <cassert>
#endif
#include <cctype>
#include <cerrno>
#include <cfloat>
#include <ciso646>
#include <climits>
#include <clocale>
#include <cmath>
#include <csetjmp>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#if __cplusplus >= 201103L
#include <ccomplex>
#include <cfenv>
#include <cinttypes>
#include <cstdbool>
#include <cstdint>
#include <ctgmath>
#include <cwchar>
#include <cwctype>
#endif
// C++
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector>
#if __cplusplus >= 201103L
#include <array>
#include <atomic>
#include <chrono>
#include <condition_variable>
#include <forward_list>
#include <future>
#include <initializer_list>
#include <mutex>
#include <random>
#include <ratio>
#include <regex>
#include <scoped_allocator>
#include <system_error>
#include <thread>
#include <tuple>
#include <typeindex>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#endif
using namespace std;

#define rep(i,n) for(int i=0; i<((int)n); i++)
#define REP(i,n) for(int i=0; i<=((int)n); i++)
#define srep(i,a,n) for(int i=a; i<((int)n); i++)
#define SREP(i,a,n) for(int i=a; i<=((int)n); i++)
#define rrep(i,n) for(int i=n-1; i>=0; i--)
#define RREP(i,n) for(int i=n; i>=0; i--)
#define INF 1000000000
const int mod = INF+7;
const int max_H=2000;
const int max_W=2000;

int main(){
  int H, W;
  cin >> H >> W;
  vector<string> S(H);
  rep(i,H){
    cin >> S[i];
  }

  int **L=(int **)malloc(sizeof(int *)*H);
  int **R=(int **)malloc(sizeof(int *)*H);
  int **U=(int **)malloc(sizeof(int *)*H);
  int **D=(int **)malloc(sizeof(int *)*H);
  rep(i,H){
    L[i]=(int *)malloc(sizeof(int)*W);
    R[i]=(int *)malloc(sizeof(int)*W);
    U[i]=(int *)malloc(sizeof(int)*W);
    D[i]=(int *)malloc(sizeof(int)*W);
  }

  rep(i,H){
    rep(j,W){
      if(S[i][j]=='#'){
        L[i][j]=0;
      }
      else{
        if(j==0){
          L[i][j]=1;
        }
        else{
          L[i][j]=L[i][j-1]+1;
        }
      }
    }
  }
  rep(i,H){
    rrep(j,W){
      if(S[i][j]=='#'){
        R[i][j]=0;
      }
      else{
        if(j==W-1){
          R[i][j]=1;
        }
        else{
          R[i][j]=R[i][j+1]+1;
        }
      }
    }
  }
  rep(i,W){
    rep(j,H){
      if(S[j][i]=='#'){
        U[j][i]=0;
      }
      else{
        if(j==0){
          U[j][i]=1;
        }
        else{
          U[j][i]=U[j-1][i]+1;
        }
      }
    }
  }
  rep(i,W){
    rrep(j,H){
      if(S[j][i]=='#'){
        D[j][i]=0;
      }
      else{
        if(j==H-1){
          D[j][i]=1;
        }
        else{
          D[j][i]=D[j+1][i]+1;
        }
      }
    }
  }

  // rep(i,H){
  //   rep(j,W){
  //     printf("(%d,%d,%d,%d) ", L[i][j], R[i][j], U[i][j], D[i][j]);
  //   }
  //   printf("\n");
  // }

  int **ans=(int **)malloc(sizeof(int *)*H);
  rep(i,H){
    ans[i]=(int *)malloc(sizeof(int)*W);
  }
  rep(i,H){
    rep(j,W){
      ans[i][j]=L[i][j]+R[i][j]+U[i][j]+D[i][j]-3;
    }
  }

  // rep(i,H){
  //   rep(j,W){
  //     printf("%d ", ans[i][j]);
  //   }
  //   printf("\n");
  // }

  int max=0;
  rep(i,H){
    rep(j,W){
      if(ans[i][j]>max){
        max=ans[i][j];
      }
    }
  }
  printf("%d\n", max);
}


Measured memory_bytes: 82688