# -*- coding: utf-8 -*-
import sys
import math
from bisect import bisect_left
from bisect import bisect_right
import collections
import copy
import heapq
from collections import defaultdict
from heapq import heappop, heappush
import itertools
input = sys.stdin.readline
from collections import defaultdict
from heapq import heappop, heappush

from decimal import *

##### リストの 二分木検索 #####
# bisect_left(lists, 3)
# bisect_right(lists, 3)

##### プライオリティキュー #####
# heapq.heapify(a) #リストaのheap化
# heapq.heappush(a,x) #heap化されたリストaに要素xを追加
# heapq.heappop(a) #heap化されたリストaから最小値を削除＆その最小値を出力

# heapq.heappush(a, -x) #最大値を取り出す時は、pushする時にマイナスにして入れよう
# heapq.heappop(a) * (-1) #取り出す時は、-1を掛けて取り出すこと

##### タプルリストのソート #####
# sorted(ans) #(a, b) -> 1st : aの昇順, 2nd : bの昇順
# sorted(SP, key=lambda x:(x[0],-x[1])) #(a, b) -> 1st : aの昇順, 2nd : bの降順
# sorted(SP, key=lambda x:(-x[0],x[1])) #(a, b) -> 1st : aの降順, 2nd : bの昇順
# sorted(SP, key=lambda x:(-x[0],-x[1])) #(a, b) -> 1st : aの降順, 2nd : bの降順

# sorted(SP, key=lambda x:(x[1])) #(a, b) -> 1st : bの昇順
# sorted(SP, key=lambda x:(-x[1])) #(a, b) -> 1st : bの降順

##### 累乗 #####
# pow(x, y, z) -> x**y % z

##### 割り算の切り上げ #####
# tmp = -(-4 // 3)

##### dict の for文 #####
# for k, v in d.items():
#     print(k, v)

def inputInt(): return int(input())
def inputMap(): return map(int, input().split())
def inputList(): return list(map(int, input().split()))
def inputStr(): return input()[:-1]

inf = float('inf')
mod = 1000000007

#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

def main():
	H,W = inputMap()
	S = []
	for i in range(H):
		tmp = inputStr()
		S.append(list(tmp))

	part_x = []
	x = 0
	for i in range(H):
		tmp = []
		for j in range(W):
			if S[i][j] == "#":
				tmp.append(x)
				x = 0
				continue
			x += 1
		tmp.append(x)
		x = 0
		part_x.append(tmp)

	part_y = []
	x = 0
	for j in range(W):
		tmp = []
		for i in range(H):
			if S[i][j] == "#":
				tmp.append(x)
				x = 0
				continue
			x += 1
		tmp.append(x)
		x = 0
		part_y.append(tmp)

	#print(part_x)
	#print(part_y)
	ans = 0
	mem = [0 for i in range(W)]
	index_xx = 0
	index_xy = 0
	index_yx = 0
	index_yy = 0
	for i in range(H):
		index_yx = 0
		for j in range(W):
			index_yx += 1
			if S[i][j] == "#":
				index_xx += 1
				mem[j] += 1
				continue
			tmp = part_x[index_xy][index_xx] + part_y[index_yx-1][mem[j]]
			#print("{} {} {}".format(i,j,part_y[index_yx-1][mem[j]]))
			if ans < tmp:
				#print("{} {}".format(i,j))
				ans = tmp
		index_xx = 0
		index_xy += 1

	print(ans-1)


#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
# nCr mod m
# rがn/2に近いと非常に重くなる
def combination(n, r, mod=10**9+7):
    r = min(r, n-r)
    res = 1
    for i in range(r):
        res = res * (n - i) * modinv(i+1, mod) % mod
    return res

# mを法とするaの乗法的逆元
def modinv(a, mod=10**9+7):
    return pow(a, mod-2, mod)

def egcd(a, b):
    if a == 0:
        return b, 0, 1
    else:
        g, y, x = egcd(b % a, a)
        return g, x - (b // a) * y, y

# nHr mod m
# 問題によって、combination()を切り替えること
def H(n, r, mod=10**9+7):
	# comb = Combination(n+r-1, mod)
	# return comb(n+r-1, r)
    return combination(n+r-1, r, mod)


class Combination:
    """
    O(n)の前計算を1回行うことで，O(1)でnCr mod mを求められる
    n_max = 10**6のとき前処理は約950ms (PyPyなら約340ms, 10**7で約1800ms)
    使用例：
    comb = Combination(1000000)
    print(comb(5, 3))  # 10
    """
    def __init__(self, n_max, mod=10**9+7):
        self.mod = mod
        self.modinv = self.make_modinv_list(n_max)
        self.fac, self.facinv = self.make_factorial_list(n_max)

    def __call__(self, n, r):
        return self.fac[n] * self.facinv[r] % self.mod * self.facinv[n-r] % self.mod

    def make_factorial_list(self, n):
        # 階乗のリストと階乗のmod逆元のリストを返す O(n)
        # self.make_modinv_list()が先に実行されている必要がある
        fac = [1]
        facinv = [1]
        for i in range(1, n+1):
            fac.append(fac[i-1] * i % self.mod)
            facinv.append(facinv[i-1] * self.modinv[i] % self.mod)
        return fac, facinv

    def make_modinv_list(self, n):
        # 0からnまでのmod逆元のリストを返す O(n)
        modinv = [0] * (n+1)
        modinv[1] = 1
        for i in range(2, n+1):
            modinv[i] = self.mod - self.mod//i * modinv[self.mod%i] % self.mod
        return modinv

#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
# dfs のサンプル
def dfs(graph,parent,counter,edge):
    stk = []
    stk.append(edge)
    while len(stk) > 0:
        p = stk.pop()
        for e in graph[p]:
            if parent[p] == e:
                continue
            else:
                parent[e] = p
                counter[e] += counter[p]
                stk.append(e)

if __name__ == "__main__":
	main() import sys sys import math math from bisect import bisect_left from bisect import bisect_right import collections collections import copy copy import heapq heapq from collections import defaultdict from heapq import heappop, heappush import itertools itertools input = sys.stdin.readline input sys.stdin.readline sys.stdin sys stdin readline from collections import defaultdict from heapq import heappop, heappush from decimal import * def inputInt(): return int(input()) inputInt def inputMap(): return map(int, input().split()) inputMap def inputList(): return list(map(int, input().split())) inputList def inputStr(): return input()[:-1] inputStr inf = float('inf') inf float('inf') float 'inf' mod = 1000000007 mod 1000000007 def main():
	H,W = inputMap()
	S = []
	for i in range(H):
		tmp = inputStr()
		S.append(list(tmp))

	part_x = []
	x = 0
	for i in range(H):
		tmp = []
		for j in range(W):
			if S[i][j] == "#":
				tmp.append(x)
				x = 0
				continue
			x += 1
		tmp.append(x)
		x = 0
		part_x.append(tmp)

	part_y = []
	x = 0
	for j in range(W):
		tmp = []
		for i in range(H):
			if S[i][j] == "#":
				tmp.append(x)
				x = 0
				continue
			x += 1
		tmp.append(x)
		x = 0
		part_y.append(tmp)

	#print(part_x)
	#print(part_y)
	ans = 0
	mem = [0 for i in range(W)]
	index_xx = 0
	index_xy = 0
	index_yx = 0
	index_yy = 0
	for i in range(H):
		index_yx = 0
		for j in range(W):
			index_yx += 1
			if S[i][j] == "#":
				index_xx += 1
				mem[j] += 1
				continue
			tmp = part_x[index_xy][index_xx] + part_y[index_yx-1][mem[j]]
			#print("{} {} {}".format(i,j,part_y[index_yx-1][mem[j]]))
			if ans < tmp:
				#print("{} {}".format(i,j))
				ans = tmp
		index_xx = 0
		index_xy += 1

	print(ans-1)


#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
# nCr mod m
# rがn/2に近いと非常に重くなる main H,W = inputMap() H inputMap() inputMap W S = [] S [] for i in range(H):
		tmp = inputStr()
		S.append(list(tmp))

	 i range(H) range H tmp = inputStr() tmp inputStr() inputStr S.append(list(tmp)) S.append S append list(tmp) list tmp part_x = [] part_x [] x = 0 x 0 for i in range(H):
		tmp = []
		for j in range(W):
			if S[i][j] == "#":
				tmp.append(x)
				x = 0
				continue
			x += 1
		tmp.append(x)
		x = 0
		part_x.append(tmp)

	 i range(H) range H tmp = [] tmp [] for j in range(W):
			if S[i][j] == "#":
				tmp.append(x)
				x = 0
				continue
			x += 1
		 j range(W) range W if S[i][j] == "#":
				tmp.append(x)
				x = 0
				continue
			 S[i][j] == "#" S[i][j] [i] S i j "#" tmp.append(x) tmp.append tmp append x x = 0 x 0 continue x += 1 x 1 tmp.append(x) tmp.append tmp append x x = 0 x 0 part_x.append(tmp) part_x.append part_x append tmp part_y = [] part_y [] x = 0 x 0 for j in range(W):
		tmp = []
		for i in range(H):
			if S[i][j] == "#":
				tmp.append(x)
				x = 0
				continue
			x += 1
		tmp.append(x)
		x = 0
		part_y.append(tmp)

	#print(part_x)
	#print(part_y)
	 j range(W) range W tmp = [] tmp [] for i in range(H):
			if S[i][j] == "#":
				tmp.append(x)
				x = 0
				continue
			x += 1
		 i range(H) range H if S[i][j] == "#":
				tmp.append(x)
				x = 0
				continue
			 S[i][j] == "#" S[i][j] [i] S i j "#" tmp.append(x) tmp.append tmp append x x = 0 x 0 continue x += 1 x 1 tmp.append(x) tmp.append tmp append x x = 0 x 0 part_y.append(tmp) part_y.append part_y append tmp ans = 0 ans 0 0 for i in range(W) for i in range(W) i range(W) range W for i in range(W) 0 mem = [0 for i in range(W)] mem [0 for i in range(W)] index_xx = 0 index_xx 0 index_xy = 0 index_xy 0 index_yx = 0 index_yx 0 index_yy = 0 index_yy 0 for i in range(H):
		index_yx = 0
		for j in range(W):
			index_yx += 1
			if S[i][j] == "#":
				index_xx += 1
				mem[j] += 1
				continue
			tmp = part_x[index_xy][index_xx] + part_y[index_yx-1][mem[j]]
			#print("{} {} {}".format(i,j,part_y[index_yx-1][mem[j]]))
			if ans < tmp:
				#print("{} {}".format(i,j))
				ans = tmp
		index_xx = 0
		index_xy += 1

	 i range(H) range H index_yx = 0 index_yx 0 for j in range(W):
			index_yx += 1
			if S[i][j] == "#":
				index_xx += 1
				mem[j] += 1
				continue
			tmp = part_x[index_xy][index_xx] + part_y[index_yx-1][mem[j]]
			#print("{} {} {}".format(i,j,part_y[index_yx-1][mem[j]]))
			if ans < tmp:
				#print("{} {}".format(i,j))
				ans = tmp
		 j range(W) range W index_yx += 1 index_yx 1 if S[i][j] == "#":
				index_xx += 1
				mem[j] += 1
				continue
			 S[i][j] == "#" S[i][j] [i] S i j "#" index_xx += 1 index_xx 1 mem[j] += 1 mem[j] mem j 1 continue tmp = part_x[index_xy][index_xx] + part_y[index_yx-1][mem[j]] tmp part_x[index_xy][index_xx] + part_y[index_yx-1][mem[j]] part_x[index_xy][index_xx] [index_xy] part_x index_xy index_xx part_y[index_yx-1][mem[j]] [index_yx-1] part_y index_yx-1 index_yx 1 mem[j] mem j if ans < tmp:
				#print("{} {}".format(i,j))
				ans = tmp
		 ans < tmp ans tmp ans = tmp ans tmp index_xx = 0 index_xx 0 index_xy += 1 index_xy 1 print(ans-1) print ans-1 ans 1 def combination(n, r, mod=10**9+7):
    r = min(r, n-r)
    res = 1
    for i in range(r):
        res = res * (n - i) * modinv(i+1, mod) % mod
    return res

# mを法とするaの乗法的逆元 combination r = min(r, n-r) r min(r, n-r) min r n-r n r res = 1 res 1 for i in range(r):
        res = res * (n - i) * modinv(i+1, mod) % mod
     i range(r) range r res = res * (n - i) * modinv(i+1, mod) % mod res res * (n - i) * modinv(i+1, mod) % mod res * (n - i) * modinv(i+1, mod) res * (n - i) res n - i n i modinv(i+1, mod) modinv i+1 i 1 mod mod return res res n n r r mod=10**9+7 mod 10**9+7 10**9 10 9 7 def modinv(a, mod=10**9+7):
    return pow(a, mod-2, mod) modinv return pow(a, mod-2, mod) pow(a, mod-2, mod) pow a mod-2 mod 2 mod a a mod=10**9+7 mod 10**9+7 10**9 10 9 7 def egcd(a, b):
    if a == 0:
        return b, 0, 1
    else:
        g, y, x = egcd(b % a, a)
        return g, x - (b // a) * y, y

# nHr mod m
# 問題によって、combination()を切り替えること egcd if a == 0:
        return b, 0, 1
    else:
        g, y, x = egcd(b % a, a)
        return g, x - (b // a) * y, y

# nHr mod m
# 問題によって、combination()を切り替えること a == 0 a 0 return b, 0, 1 return b, 0, 1 b 0 1 g, y, x = egcd(b % a, a) g egcd(b % a, a) egcd b % a b a a y x return g, x - (b // a) * y, y return g, x - (b // a) * y, y g x - (b // a) * y x (b // a) * y b // a b a y y a a b b def H(n, r, mod=10**9+7):
	# comb = Combination(n+r-1, mod)
	# return comb(n+r-1, r)
    return combination(n+r-1, r, mod) H return combination(n+r-1, r, mod) combination(n+r-1, r, mod) combination n+r-1 n+r n r 1 r mod n n r r mod=10**9+7 mod 10**9+7 10**9 10 9 7 class Combination:
    """
    O(n)の前計算を1回行うことで，O(1)でnCr mod mを求められる
    n_max = 10**6のとき前処理は約950ms (PyPyなら約340ms, 10**7で約1800ms)
    使用例：
    comb = Combination(1000000)
    print(comb(5, 3))  # 10
    """
    def __init__(self, n_max, mod=10**9+7):
        self.mod = mod
        self.modinv = self.make_modinv_list(n_max)
        self.fac, self.facinv = self.make_factorial_list(n_max)

    def __call__(self, n, r):
        return self.fac[n] * self.facinv[r] % self.mod * self.facinv[n-r] % self.mod

    def make_factorial_list(self, n):
        # 階乗のリストと階乗のmod逆元のリストを返す O(n)
        # self.make_modinv_list()が先に実行されている必要がある
        fac = [1]
        facinv = [1]
        for i in range(1, n+1):
            fac.append(fac[i-1] * i % self.mod)
            facinv.append(facinv[i-1] * self.modinv[i] % self.mod)
        return fac, facinv

    def make_modinv_list(self, n):
        # 0からnまでのmod逆元のリストを返す O(n)
        modinv = [0] * (n+1)
        modinv[1] = 1
        for i in range(2, n+1):
            modinv[i] = self.mod - self.mod//i * modinv[self.mod%i] % self.mod
        return modinv

#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
# dfs のサンプル Combination """
    O(n)の前計算を1回行うことで，O(1)でnCr mod mを求められる
    n_max = 10**6のとき前処理は約950ms (PyPyなら約340ms, 10**7で約1800ms)
    使用例：
    comb = Combination(1000000)
    print(comb(5, 3))  # 10
    """ def __init__(self, n_max, mod=10**9+7):
        self.mod = mod
        self.modinv = self.make_modinv_list(n_max)
        self.fac, self.facinv = self.make_factorial_list(n_max)

     __init__ self.mod = mod self.mod self mod mod self.modinv = self.make_modinv_list(n_max) self.modinv self modinv self.make_modinv_list(n_max) self.make_modinv_list self make_modinv_list n_max self.fac, self.facinv = self.make_factorial_list(n_max) self.fac self fac self.make_factorial_list(n_max) self.make_factorial_list self make_factorial_list n_max self.facinv self facinv self self n_max n_max mod=10**9+7 mod 10**9+7 10**9 10 9 7 def __call__(self, n, r):
        return self.fac[n] * self.facinv[r] % self.mod * self.facinv[n-r] % self.mod

     __call__ return self.fac[n] * self.facinv[r] % self.mod * self.facinv[n-r] % self.mod self.fac[n] * self.facinv[r] % self.mod * self.facinv[n-r] % self.mod self.fac[n] * self.facinv[r] % self.mod * self.facinv[n-r] self.fac[n] * self.facinv[r] % self.mod self.fac[n] * self.facinv[r] self.fac[n] self.fac self fac n self.facinv[r] self.facinv self facinv r self.mod self mod self.facinv[n-r] self.facinv self facinv n-r n r self.mod self mod self self n n r r def make_factorial_list(self, n):
        # 階乗のリストと階乗のmod逆元のリストを返す O(n)
        # self.make_modinv_list()が先に実行されている必要がある
        fac = [1]
        facinv = [1]
        for i in range(1, n+1):
            fac.append(fac[i-1] * i % self.mod)
            facinv.append(facinv[i-1] * self.modinv[i] % self.mod)
        return fac, facinv

     make_factorial_list fac = [1] fac [1] 1 facinv = [1] facinv [1] 1 for i in range(1, n+1):
            fac.append(fac[i-1] * i % self.mod)
            facinv.append(facinv[i-1] * self.modinv[i] % self.mod)
         i range(1, n+1) range 1 n+1 n 1 fac.append(fac[i-1] * i % self.mod) fac.append fac append fac[i-1] * i % self.mod fac[i-1] * i fac[i-1] fac i-1 i 1 i self.mod self mod facinv.append(facinv[i-1] * self.modinv[i] % self.mod) facinv.append facinv append facinv[i-1] * self.modinv[i] % self.mod facinv[i-1] * self.modinv[i] facinv[i-1] facinv i-1 i 1 self.modinv[i] self.modinv self modinv i self.mod self mod return fac, facinv return fac, facinv fac facinv self self n n def make_modinv_list(self, n):
        # 0からnまでのmod逆元のリストを返す O(n)
        modinv = [0] * (n+1)
        modinv[1] = 1
        for i in range(2, n+1):
            modinv[i] = self.mod - self.mod//i * modinv[self.mod%i] % self.mod
        return modinv

#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
# dfs のサンプル make_modinv_list modinv = [0] * (n+1) modinv [0] * (n+1) [0] 0 n+1 n 1 modinv[1] = 1 modinv[1] modinv 1 1 for i in range(2, n+1):
            modinv[i] = self.mod - self.mod//i * modinv[self.mod%i] % self.mod
         i range(2, n+1) range 2 n+1 n 1 modinv[i] = self.mod - self.mod//i * modinv[self.mod%i] % self.mod modinv[i] modinv i self.mod - self.mod//i * modinv[self.mod%i] % self.mod self.mod self mod self.mod//i * modinv[self.mod%i] % self.mod self.mod//i * modinv[self.mod%i] self.mod//i self.mod self mod i modinv[self.mod%i] modinv self.mod%i self.mod self mod i self.mod self mod return modinv modinv self self n n def dfs(graph,parent,counter,edge):
    stk = []
    stk.append(edge)
    while len(stk) > 0:
        p = stk.pop()
        for e in graph[p]:
            if parent[p] == e:
                continue
            else:
                parent[e] = p
                counter[e] += counter[p]
                stk.append(e) dfs stk = [] stk [] stk.append(edge) stk.append stk append edge while len(stk) > 0:
        p = stk.pop()
        for e in graph[p]:
            if parent[p] == e:
                continue
            else:
                parent[e] = p
                counter[e] += counter[p]
                stk.append(e) len(stk) > 0 len(stk) len stk 0 p = stk.pop() p stk.pop() stk.pop stk pop for e in graph[p]:
            if parent[p] == e:
                continue
            else:
                parent[e] = p
                counter[e] += counter[p]
                stk.append(e) e graph[p] graph p if parent[p] == e:
                continue
            else:
                parent[e] = p
                counter[e] += counter[p]
                stk.append(e) parent[p] == e parent[p] parent p e continue parent[e] = p parent[e] parent e p counter[e] += counter[p] counter[e] counter e counter[p] counter p stk.append(e) stk.append stk append e graph graph parent parent counter counter edge edge if __name__ == "__main__":
	main() __name__ == "__main__" __name__ "__main__" main() main inf = float('inf') float('inf') inf def modinv(a, mod=10**9+7):
    return pow(a, mod-2, mod) def modinv(a, mod=10**9+7):
    return pow(a, mod-2, mod) modinv input = sys.stdin.readline sys.stdin.readline input def egcd(a, b):
    if a == 0:
        return b, 0, 1
    else:
        g, y, x = egcd(b % a, a)
        return g, x - (b // a) * y, y

# nHr mod m
# 問題によって、combination()を切り替えること def egcd(a, b):
    if a == 0:
        return b, 0, 1
    else:
        g, y, x = egcd(b % a, a)
        return g, x - (b // a) * y, y

# nHr mod m
# 問題によって、combination()を切り替えること egcd def dfs(graph,parent,counter,edge):
    stk = []
    stk.append(edge)
    while len(stk) > 0:
        p = stk.pop()
        for e in graph[p]:
            if parent[p] == e:
                continue
            else:
                parent[e] = p
                counter[e] += counter[p]
                stk.append(e) def dfs(graph,parent,counter,edge):
    stk = []
    stk.append(edge)
    while len(stk) > 0:
        p = stk.pop()
        for e in graph[p]:
            if parent[p] == e:
                continue
            else:
                parent[e] = p
                counter[e] += counter[p]
                stk.append(e) dfs def inputMap(): return map(int, input().split()) def inputMap(): return map(int, input().split()) inputMap class Combination:
    """
    O(n)の前計算を1回行うことで，O(1)でnCr mod mを求められる
    n_max = 10**6のとき前処理は約950ms (PyPyなら約340ms, 10**7で約1800ms)
    使用例：
    comb = Combination(1000000)
    print(comb(5, 3))  # 10
    """
    def __init__(self, n_max, mod=10**9+7):
        self.mod = mod
        self.modinv = self.make_modinv_list(n_max)
        self.fac, self.facinv = self.make_factorial_list(n_max)

    def __call__(self, n, r):
        return self.fac[n] * self.facinv[r] % self.mod * self.facinv[n-r] % self.mod

    def make_factorial_list(self, n):
        # 階乗のリストと階乗のmod逆元のリストを返す O(n)
        # self.make_modinv_list()が先に実行されている必要がある
        fac = [1]
        facinv = [1]
        for i in range(1, n+1):
            fac.append(fac[i-1] * i % self.mod)
            facinv.append(facinv[i-1] * self.modinv[i] % self.mod)
        return fac, facinv

    def make_modinv_list(self, n):
        # 0からnまでのmod逆元のリストを返す O(n)
        modinv = [0] * (n+1)
        modinv[1] = 1
        for i in range(2, n+1):
            modinv[i] = self.mod - self.mod//i * modinv[self.mod%i] % self.mod
        return modinv

#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
# dfs のサンプル class Combination:
    """
    O(n)の前計算を1回行うことで，O(1)でnCr mod mを求められる
    n_max = 10**6のとき前処理は約950ms (PyPyなら約340ms, 10**7で約1800ms)
    使用例：
    comb = Combination(1000000)
    print(comb(5, 3))  # 10
    """
    def __init__(self, n_max, mod=10**9+7):
        self.mod = mod
        self.modinv = self.make_modinv_list(n_max)
        self.fac, self.facinv = self.make_factorial_list(n_max)

    def __call__(self, n, r):
        return self.fac[n] * self.facinv[r] % self.mod * self.facinv[n-r] % self.mod

    def make_factorial_list(self, n):
        # 階乗のリストと階乗のmod逆元のリストを返す O(n)
        # self.make_modinv_list()が先に実行されている必要がある
        fac = [1]
        facinv = [1]
        for i in range(1, n+1):
            fac.append(fac[i-1] * i % self.mod)
            facinv.append(facinv[i-1] * self.modinv[i] % self.mod)
        return fac, facinv

    def make_modinv_list(self, n):
        # 0からnまでのmod逆元のリストを返す O(n)
        modinv = [0] * (n+1)
        modinv[1] = 1
        for i in range(2, n+1):
            modinv[i] = self.mod - self.mod//i * modinv[self.mod%i] % self.mod
        return modinv

#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
# dfs のサンプル Combination mod = 1000000007 1000000007 mod def main():
	H,W = inputMap()
	S = []
	for i in range(H):
		tmp = inputStr()
		S.append(list(tmp))

	part_x = []
	x = 0
	for i in range(H):
		tmp = []
		for j in range(W):
			if S[i][j] == "#":
				tmp.append(x)
				x = 0
				continue
			x += 1
		tmp.append(x)
		x = 0
		part_x.append(tmp)

	part_y = []
	x = 0
	for j in range(W):
		tmp = []
		for i in range(H):
			if S[i][j] == "#":
				tmp.append(x)
				x = 0
				continue
			x += 1
		tmp.append(x)
		x = 0
		part_y.append(tmp)

	#print(part_x)
	#print(part_y)
	ans = 0
	mem = [0 for i in range(W)]
	index_xx = 0
	index_xy = 0
	index_yx = 0
	index_yy = 0
	for i in range(H):
		index_yx = 0
		for j in range(W):
			index_yx += 1
			if S[i][j] == "#":
				index_xx += 1
				mem[j] += 1
				continue
			tmp = part_x[index_xy][index_xx] + part_y[index_yx-1][mem[j]]
			#print("{} {} {}".format(i,j,part_y[index_yx-1][mem[j]]))
			if ans < tmp:
				#print("{} {}".format(i,j))
				ans = tmp
		index_xx = 0
		index_xy += 1

	print(ans-1)


#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
# nCr mod m
# rがn/2に近いと非常に重くなる def main():
	H,W = inputMap()
	S = []
	for i in range(H):
		tmp = inputStr()
		S.append(list(tmp))

	part_x = []
	x = 0
	for i in range(H):
		tmp = []
		for j in range(W):
			if S[i][j] == "#":
				tmp.append(x)
				x = 0
				continue
			x += 1
		tmp.append(x)
		x = 0
		part_x.append(tmp)

	part_y = []
	x = 0
	for j in range(W):
		tmp = []
		for i in range(H):
			if S[i][j] == "#":
				tmp.append(x)
				x = 0
				continue
			x += 1
		tmp.append(x)
		x = 0
		part_y.append(tmp)

	#print(part_x)
	#print(part_y)
	ans = 0
	mem = [0 for i in range(W)]
	index_xx = 0
	index_xy = 0
	index_yx = 0
	index_yy = 0
	for i in range(H):
		index_yx = 0
		for j in range(W):
			index_yx += 1
			if S[i][j] == "#":
				index_xx += 1
				mem[j] += 1
				continue
			tmp = part_x[index_xy][index_xx] + part_y[index_yx-1][mem[j]]
			#print("{} {} {}".format(i,j,part_y[index_yx-1][mem[j]]))
			if ans < tmp:
				#print("{} {}".format(i,j))
				ans = tmp
		index_xx = 0
		index_xy += 1

	print(ans-1)


#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
# nCr mod m
# rがn/2に近いと非常に重くなる main def inputStr(): return input()[:-1] def inputStr(): return input()[:-1] inputStr def H(n, r, mod=10**9+7):
	# comb = Combination(n+r-1, mod)
	# return comb(n+r-1, r)
    return combination(n+r-1, r, mod) def H(n, r, mod=10**9+7):
	# comb = Combination(n+r-1, mod)
	# return comb(n+r-1, r)
    return combination(n+r-1, r, mod) H def inputInt(): return int(input()) def inputInt(): return int(input()) inputInt def combination(n, r, mod=10**9+7):
    r = min(r, n-r)
    res = 1
    for i in range(r):
        res = res * (n - i) * modinv(i+1, mod) % mod
    return res

# mを法とするaの乗法的逆元 def combination(n, r, mod=10**9+7):
    r = min(r, n-r)
    res = 1
    for i in range(r):
        res = res * (n - i) * modinv(i+1, mod) % mod
    return res

# mを法とするaの乗法的逆元 combination def inputList(): return list(map(int, input().split())) def inputList(): return list(map(int, input().split())) inputList
# -*- coding: utf-8 -*-
import sys
import math
from bisect import bisect_left
from bisect import bisect_right
import collections
import copy
import heapq
from collections import defaultdict
from heapq import heappop, heappush
import itertools
input = sys.stdin.readline
from collections import defaultdict
from heapq import heappop, heappush

from decimal import *

##### リストの 二分木検索 #####
# bisect_left(lists, 3)
# bisect_right(lists, 3)

##### プライオリティキュー #####
# heapq.heapify(a) #リストaのheap化
# heapq.heappush(a,x) #heap化されたリストaに要素xを追加
# heapq.heappop(a) #heap化されたリストaから最小値を削除＆その最小値を出力

# heapq.heappush(a, -x) #最大値を取り出す時は、pushする時にマイナスにして入れよう
# heapq.heappop(a) * (-1) #取り出す時は、-1を掛けて取り出すこと

##### タプルリストのソート #####
# sorted(ans) #(a, b) -> 1st : aの昇順, 2nd : bの昇順
# sorted(SP, key=lambda x:(x[0],-x[1])) #(a, b) -> 1st : aの昇順, 2nd : bの降順
# sorted(SP, key=lambda x:(-x[0],x[1])) #(a, b) -> 1st : aの降順, 2nd : bの昇順
# sorted(SP, key=lambda x:(-x[0],-x[1])) #(a, b) -> 1st : aの降順, 2nd : bの降順

# sorted(SP, key=lambda x:(x[1])) #(a, b) -> 1st : bの昇順
# sorted(SP, key=lambda x:(-x[1])) #(a, b) -> 1st : bの降順

##### 累乗 #####
# pow(x, y, z) -> x**y % z

##### 割り算の切り上げ #####
# tmp = -(-4 // 3)

##### dict の for文 #####
# for k, v in d.items():
#     print(k, v)

def inputInt(): return int(input())
def inputMap(): return map(int, input().split())
def inputList(): return list(map(int, input().split()))
def inputStr(): return input()[:-1]

inf = float('inf')
mod = 1000000007

#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

def main():
	H,W = inputMap()
	S = []
	for i in range(H):
		tmp = inputStr()
		S.append(list(tmp))

	part_x = []
	x = 0
	for i in range(H):
		tmp = []
		for j in range(W):
			if S[i][j] == "#":
				tmp.append(x)
				x = 0
				continue
			x += 1
		tmp.append(x)
		x = 0
		part_x.append(tmp)

	part_y = []
	x = 0
	for j in range(W):
		tmp = []
		for i in range(H):
			if S[i][j] == "#":
				tmp.append(x)
				x = 0
				continue
			x += 1
		tmp.append(x)
		x = 0
		part_y.append(tmp)

	#print(part_x)
	#print(part_y)
	ans = 0
	mem = [0 for i in range(W)]
	index_xx = 0
	index_xy = 0
	index_yx = 0
	index_yy = 0
	for i in range(H):
		index_yx = 0
		for j in range(W):
			index_yx += 1
			if S[i][j] == "#":
				index_xx += 1
				mem[j] += 1
				continue
			tmp = part_x[index_xy][index_xx] + part_y[index_yx-1][mem[j]]
			#print("{} {} {}".format(i,j,part_y[index_yx-1][mem[j]]))
			if ans < tmp:
				#print("{} {}".format(i,j))
				ans = tmp
		index_xx = 0
		index_xy += 1

	print(ans-1)


#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
# nCr mod m
# rがn/2に近いと非常に重くなる
def combination(n, r, mod=10**9+7):
    r = min(r, n-r)
    res = 1
    for i in range(r):
        res = res * (n - i) * modinv(i+1, mod) % mod
    return res

# mを法とするaの乗法的逆元
def modinv(a, mod=10**9+7):
    return pow(a, mod-2, mod)

def egcd(a, b):
    if a == 0:
        return b, 0, 1
    else:
        g, y, x = egcd(b % a, a)
        return g, x - (b // a) * y, y

# nHr mod m
# 問題によって、combination()を切り替えること
def H(n, r, mod=10**9+7):
	# comb = Combination(n+r-1, mod)
	# return comb(n+r-1, r)
    return combination(n+r-1, r, mod)


class Combination:
    """
    O(n)の前計算を1回行うことで，O(1)でnCr mod mを求められる
    n_max = 10**6のとき前処理は約950ms (PyPyなら約340ms, 10**7で約1800ms)
    使用例：
    comb = Combination(1000000)
    print(comb(5, 3))  # 10
    """
    def __init__(self, n_max, mod=10**9+7):
        self.mod = mod
        self.modinv = self.make_modinv_list(n_max)
        self.fac, self.facinv = self.make_factorial_list(n_max)

    def __call__(self, n, r):
        return self.fac[n] * self.facinv[r] % self.mod * self.facinv[n-r] % self.mod

    def make_factorial_list(self, n):
        # 階乗のリストと階乗のmod逆元のリストを返す O(n)
        # self.make_modinv_list()が先に実行されている必要がある
        fac = [1]
        facinv = [1]
        for i in range(1, n+1):
            fac.append(fac[i-1] * i % self.mod)
            facinv.append(facinv[i-1] * self.modinv[i] % self.mod)
        return fac, facinv

    def make_modinv_list(self, n):
        # 0からnまでのmod逆元のリストを返す O(n)
        modinv = [0] * (n+1)
        modinv[1] = 1
        for i in range(2, n+1):
            modinv[i] = self.mod - self.mod//i * modinv[self.mod%i] % self.mod
        return modinv

#-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
# dfs のサンプル
def dfs(graph,parent,counter,edge):
    stk = []
    stk.append(edge)
    while len(stk) > 0:
        p = stk.pop()
        for e in graph[p]:
            if parent[p] == e:
                continue
            else:
                parent[e] = p
                counter[e] += counter[p]
                stk.append(e)

if __name__ == "__main__":
	main()
