#pragma GCC optimize(3, "Ofast", "inline")
#include <bits/stdc++.h>
#if __cplusplus >= 201103L
#include <chrono>
using namespace std::chrono;
#endif
using namespace std;
#define ll long long
#define ull unsigned long long
#define pii pair<int, int>
#define pb push_back
#define fi first
#define se second
#ifdef LOCAL
#define prln(x) (cout << #x << ' ' << x << endl)
#define pr(x) (cout << #x << ' ' << x << ' ' )
#define prv(x) (cout << x << ' ')
#else
#define prln(x) 
#define pr(x)
#define prv(x)
#endif
#define clr(x) memset((x), 0, sizeof((x)))
#define clr1(x) memset((x), -1, sizeof((x)))
#define endl "\n"
#define pi acos(-1)
#define rep(i, st, ed) for (int i = (st); i <= (ed); ++i)
#define rep0(i, st, ed) for (int i = (st); i < (ed); ++i)
#define per(i, st, ed) for (int i = (st); i >= ed; --i)
template<class T> void _sf(T &x) {cin >> x;}
void _sf(int &x) {scanf("%d", &x);}
void _sf(ll &x) {scanf("%lld", &x);}
void _sf(double &x) {scanf("%lf", &x);}
void _sf(char &x) {scanf(" %c", &x);}
void _sf(char *x) {scanf("%s", x);}
void sf() {}
template <class T, class...U> void sf(T & head, U&... tail) { _sf(head); sf(tail...);}
const int mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;

int read() {
    int x = 0, f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9') {
        if (ch == '-') f = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9') {
        x = x * 10 + ch - '0';
        ch = getchar();
    }
    return x * f;
}
const int maxn = 2e3 + 5;
struct Node {
    char ch;
    int l, r, u, d;
    Node () {
        l = r = u = d = 0;
    }
}g[maxn][maxn];

int main(){
    #ifdef LOCAL
        freopen("in.txt", "r", stdin);
        freopen("out.txt", "w", stdout);
        #if __cplusplus >= 201103L
        auto start = steady_clock::now();
        #endif
    #endif  
    int n = read(), m = read();
    rep(i, 1, n) {
        rep(j, 1, m) {
            scanf("%c", &g[i][j].ch);
        }
        getchar();
    }

    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m; ++j) {
            if (g[i][j].ch == '#') {
                g[i][j].l = 0;
            }else {        
                g[i][j].l = g[i][j - 1].l + 1;
            }
        }
        for (int j = m; j >= 1; --j) {
            if (g[i][j].ch == '#') {
                g[i][j].r = 0;
            }else {
                g[i][j].r = g[i][j + 1].r + 1;
            }
        }
    }

    for (int j = 1; j <= m; ++j) {
        for (int i = 1; i <= n; ++i) {
            if (g[i][j].ch == '#') {
                g[i][j].u = 0;
            }else {
                g[i][j].u = g[i - 1][j].u + 1;
            }
        }

        for (int i = n; i >= 1; --i) {
            if (g[i][j].ch == '#') {
                g[i][j].d = 0;
            }else {
                g[i][j].d = g[i + 1][j].d + 1;
            }
        }
    }
    int ans = 0;
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m; ++j) {
            int temp = g[i][j].l + g[i][j].r + g[i][j].d + g[i][j].u;
            if (g[i][j].ch == '.') {
                temp -= 3;
            }
            pr(g[i][j].l);pr(g[i][j].r);
            pr(g[i][j].u);prln(g[i][j].d);
            pr(i);pr(j);prln(temp);
            
            ans = max(ans, temp);
        }
    }
    cout << ans << endl;
    #ifdef LOCAL
        #if __cplusplus >= 201103L
        auto end = steady_clock::now();
        duration<double> time_span = duration_cast<duration<double>>(end - start);;
        printf("Total time: %.6fs\n", time_span.count());
        #endif
    #endif
    return 0;
}

Measured memory_bytes: 78720