#include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N, K; cin >> N >> K; vector A(N); for (int i = 0; i < N; i++) { cin >> A[i]; } if (2 * K - 1 > N) { cout << "Impossible\n"; exit(0); } const long long inf = -1e18; vector dp(N + 1, vector(K + 1, vector(2, inf))); dp[0][0][0] = 0; for (int i = 0; i < N; i++) { for (int j = 0; j <= K; j++) { for (int k = 0; k < 2; k++) { if (k == 0) { dp[i + 1][j][0] = max(dp[i + 1][j][0], dp[i][j][0]); if (j + 1 <= K) { dp[i + 1][j + 1][1] = max(dp[i + 1][j + 1][1], dp[i][j][0] + A[i]); } } if (k == 1) { dp[i + 1][j][0] = max(dp[i + 1][j][0], dp[i][j][1]); } } } } long long ans = 0; for (int i = K; i <= N; i++) { for (int j = 0; j < 2; j++) { ans = max(ans, dp[i][K][j]); } } cout << ans << '\n'; // #ifdef LOCAL // for (int i = 0; i <= N; i++) { // for (int j = 0; j <= K; j++) { // for (int k = 0; k < 2; k++) { // cout << i << " " << j << " " << k << " " << dp[i][j][k] << endl; // } // } // } // #endif return 0; }