class Program { static (int a, int b) GetInput2() { int[] input = Console.ReadLine().Split().Select(_ => int.Parse(_)).ToArray(); return (input[0], input[1]); } static void Main() { (int N, int K) = GetInput2(); int[] A = Console.ReadLine().Split().Select(_ => int.Parse(_)).ToArray(); void ArrayFill(long[,] arr) { for (int i = 0; i < arr.GetLength(0); i++) { for (int j = 0; j < arr.GetLength(1); j++) arr[i, j] = long.MinValue; // long.MinValue は値が未定義であることを示す } } long[,] dp = new long[K + 1, 2]; ArrayFill(dp); dp[0, 0] = 0; foreach (long v in A) { long[,] new_dp = new long[K + 1, 2]; ArrayFill(new_dp); for (int k = 0; k <= K; k++) { if(dp[k, 0] != long.MinValue && k + 1 <= K) new_dp[k + 1, 1] = dp[k, 0] + v; new_dp[k, 0] = Math.Max(dp[k, 0], dp[k, 1]); } dp = new_dp; } long ans = Math.Max(dp[K, 0], dp[K, 1]); if(ans > long.MinValue) Console.WriteLine(ans); else Console.WriteLine("Impossible"); } }