object Main {

  def main(args: Array[String]): Unit = {
    import scala.io.StdIn._

//    val Array(n, m) = readLine().split(" ").map(_.toInt)
//    val KS: Array[(Int, Array[Int])] = (0 until m). map { i =>
//      val Array(k, s @ _*) = readLine().split(" ").map(_.toInt)
//      (k, s.toArray)
//    }. toArray
//    val P = readLine().split(" ").map(_.toInt)

    val Array(_n, _k) = readLine().split(" ").map(_.toInt)
    val N = _n
    val K = _k
    val V = readLine().split(" ").map(_.toInt).toArray
    val dp = Array.fill(K+1, N, N)(Int.MinValue)

    //　K回目の操作の時に, Vl ~ Vrのうちから取り出す最大価値
    def solve(k: Int, l: Int, r: Int): Int =
      if (k <= 0) 0 // 残り操作回数がK回以上ならK
      else if (l >= 0 && l < N && l <= r && r < N) {
        if (dp(k)(l)(r) >= 0) dp(k)(l)(r)
        else {
          val dpLeft =
            if (V(l) > 0) solve(k - 1, l - 1, r) + V(l)
            else solve(k - 2, l - 1, r)
          val dpRight =
            if (V(r) > 0) solve(k - 1, l, r - 1) + V(r)
            else solve(k - 2, l, r - 1)
          // Vl, Vrのどちらから取り出した方が価値が高いか
          // K - 1回目の時, K - 1
          dp(k)(l)(r) = Math.max(dpLeft, dpRight)
          dp(k)(l)(r)
        }
      } else 0

    (0 until K) foreach { i =>
      (0 until N) foreach { j =>
        dp(i)(j)(j) = 0
      }
    }

    solve(K, 0, N-1)
    println(dp(K)(N-1)(N-1))
  }
}