import java.io._
import java.util.StringTokenizer
import scala.util.control.Breaks.{breakable,break}

object Main extends App {
  val in = new InputReader(System.in)
  val pw = new PrintWriter(System.out)

  // val a = new Array[Int](N)

  // val n = in.next().toInt
  // val a, b = in.next().toInt
  // val s = in.next()

  val H, W = in.next().toInt
  val S = new Array[String](H+1)
  for (i <- 1 to H)
    S(i) = "#" + in.next()

  //
  val wall = '#'

  val dpRow = Array.ofDim[Int](H+1, W+1)
  for (y <- 1 to H) {
    var cnt = 0
    for (x <- 1 to W) {
      if (S(y)(x) != wall) {
        cnt += 1
        if (x == W)
          dpRow(y)(x) = cnt
      }
      else {
        dpRow(y)(x) = cnt
        cnt = 0
      }
    }
  }

  for (y <- 1 to H) {
    var now = 0
    for (x <- (1 to W).reverse) {
      if (dpRow(y)(x) != 0) {
        now = dpRow(y)(x)
      }
      else {
        dpRow(y)(x) = now
      }
    }
  }


  //
  val dpCol = Array.ofDim[Int](H+1, W+1)
  for (x <- 1 to W) {
    var cnt = 0
    for (y <- 1 to H) {
      if (S(y)(x) != wall) {
        cnt += 1
        if (y == H)
          dpCol(y)(x) = cnt
      }
      else {
        dpCol(y)(x) = cnt
        cnt = 0
      }
    }
  }

  for (x <- 1 to W) {
    var now = 0
    for (y <- (1 to H).reverse) {
      if (dpCol(y)(x) != 0) {
        now = dpCol(y)(x)
      }
      else {
        dpCol(y)(x) = now
      }
    }
  }


  //
  var ans = 0L
  for (y <- 1 to H) {
    for (x <- 1 to W) {
      if (S(y)(x) != wall) {
        ans = Math.max(ans, dpRow(y)(x) + dpCol(y)(x) - 1)
      }
    }
  }

  println(ans)
}


class InputReader(stream: InputStream) {
  private val reader = new BufferedReader(new InputStreamReader(stream))
  private var tokenizer: StringTokenizer = new StringTokenizer(reader.readLine())
  def next(): String = {
    while (!tokenizer.hasMoreTokens()) {
      tokenizer = new StringTokenizer(reader.readLine())
    }
    tokenizer.nextToken()
  }
}
