Kevin Sun wants to move his precious collection of n cowbells from Naperthrill to Exeter, where there is actually grass instead of corn. Before moving, he must pack his cowbells into k boxes of a fixed size. In order to keep his collection safe during transportation, he won't place more than two cowbells into a single box. Since Kevin wishes to minimize expenses, he is curious about the smallest size box he can use to pack his entire collection. 

Kevin is a meticulous cowbell collector and knows that the size of his i-th (1 ≤ i ≤ n) cowbell is an integer si. In fact, he keeps his cowbells sorted by size, so si - 1 ≤ si for any i > 1. Also an expert packer, Kevin can fit one or two cowbells into a box of size s if and only if the sum of their sizes does not exceed s. Given this information, help Kevin determine the smallest s for which it is possible to put all of his cowbells into k boxes of size s.

Input

The first line of the input contains two space-separated integers n and k (1 ≤ n ≤ 2·k ≤ 100 000), denoting the number of cowbells and the number of boxes, respectively.

The next line contains n space-separated integers s1, s2, ..., sn (1 ≤ s1 ≤ s2 ≤ ... ≤ sn ≤ 1 000 000), the sizes of Kevin's cowbells. It is guaranteed that the sizes si are given in non-decreasing order.

Output

Print a single integer, the smallest s for which it is possible for Kevin to put all of his cowbells into k boxes of size s.

Examples

Input

2 1
2 5


Output

7


Input

4 3
2 3 5 9


Output

9


Input

3 2
3 5 7


Output

8

Note

In the first sample, Kevin must pack his two cowbells into the same box. 

In the second sample, Kevin can pack together the following sets of cowbells: {2, 3}, {5} and {9}.

In the third sample, the optimal solution is {3, 5} and {7}.
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 50;
const int M = 5e3 + 50;
int n, m, u, k, l, r, t;
int cnt, cnt1, cnt2, ans;
int mn = INT_MAX;
int mx = INT_MIN;
const int fx[] = {-1, -1, -1, 0, 0, 1, 1, 1};
const int fy[] = {-1, 0, 1, -1, 1, -1, 0, 1};
const int dx[] = {0, 1, 0, -1};
const int dy[] = {1, 0, -1, 0};
int visited[N];
const int MOD = (1ll << 30);
const int mod = 1e9 + 7;
bool cmp(pair<int, int> a, pair<int, int> b) {
  return abs(a.second) > abs(b.second);
}
bool cmp1(const pair<string, pair<int, int>> &a,
          const pair<string, pair<int, int>> &b) {
  return abs(a.second.first) < abs(b.second.first);
}
bool isPowerOfTwo(int n) { return (ceil(log2(n)) == floor(log2(n))); }
int makedigit(string n) {
  int res = 0;
  for (int i = 0; i < n.size(); i++) {
    res = res * 10 + (n[i] - '0');
  }
  return res;
}
string inttostrng(int a) {
  ostringstream temp;
  string str;
  temp << a;
  return temp.str();
}
void clearr(int vis[N], int n) {
  for (int i = 0; i < n; i++) {
    vis[i] = 0;
  }
}
long long pow(long long a, long long b, long long m) {
  long long ans = 1;
  while (b) {
    if (b & 1) {
      ans = (ans * a) % m;
    }
    b /= 2;
    a = (a * a) % m;
  }
  return ans;
}
void solve() {
  int second[N];
  cin >> n >> k;
  for (int i = 0; i < n; i++) {
    cin >> second[i];
  }
  mx = second[n - 1];
  for (int i = 0; i < n - k; i++) {
    mx = max(mx, second[i] + second[2 * (n - k) - i - 1]);
  }
  cout << mx;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  ios_base::sync_with_stdio(0);
  t = 1;
  while (t--) {
    solve();
  }
}
