import std.stdio, std.string, std.conv, std.algorithm;

void main() {
    int[] tmp = readln.split.to!(int[]);
    int h = tmp[0], w = tmp[1];
    string[] grid = new string[h];
    foreach (i; 0 .. h) {
        string s = readln.chomp;
        grid[i] = s;
    }
    int[][] a = new int[][](h, w);
    foreach (i; 0 .. h) {
        foreach (j; 0 .. w) {
            if (j == 0) {
                if (grid[i][j] == '.') a[i][j] = 1;
                else a[i][j] = 0;
            } else {
                if (grid[i][j] == '.') a[i][j] = a[i][j-1] + 1;
                else a[i][j] = 0;
            }
        }
    }
    int[][] b = new int[][](h, w);
    foreach (i; 0 .. h) {
        foreach_reverse (j; 0 .. w) {
            if (j == w - 1) {
                if (grid[i][j] == '.') b[i][j] = 1;
                else b[i][j] = 0;
            } else {
                if (grid[i][j] == '.') b[i][j] = b[i][j+1] + 1;
                else b[i][j] = 0;
            }
        }
    }
    int[][] c = new int[][](h, w);
    foreach (j; 0 .. w) {
        foreach (i; 0 .. h) {
            if (i == 0) {
                if (grid[i][j] == '.') c[i][j] = 1;
                else c[i][j] = 0;
            } else {
                if (grid[i][j] == '.') c[i][j] = c[i-1][j] + 1;
                else c[i][j] = 0;
            }
        }
    }
    int[][] d = new int[][](h, w);
    foreach (j; 0 .. w) {
        foreach_reverse (i; 0 .. h) {
            if (i == h - 1) {
                if (grid[i][j] == '.') d[i][j] = 1;
                else d[i][j] = 0;
            } else {
                if (grid[i][j] == '.') d[i][j] = d[i+1][j] + 1;
                else d[i][j] = 0;
            }
        }
    }
    int ans = 0;
    foreach (i; 0 .. h) {
        foreach (j; 0 .. w) {
            ans = max(ans, a[i][j]+b[i][j]+c[i][j]+d[i][j]-3);
        }
    }
    ans.writeln;
}