public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
int n1 = scn.nextInt();
for(int i = 0 ; i < n1 ; i++) {
long n2 = scn.nextInt();
long n3 = scn.nextInt();
long[] arr = new long[(int)n2];
for(int j = 0 ; j < n2 ; j++){
arr[j] = scn.nextInt();
}
System.out.print(min(arr,n2,n3));
}
}
public static long min(long[] arr, long n, long k) {
long lo = arr[arr.length - 1];
long total_pages = 0;
long hi = 0;
for (int i = 0; i < n; i++) {
total_pages += arr[i];
}
hi = total_pages;
long ans = 0;
while (lo <= hi) {
long mid = (lo + hi) / 2;
boolean isvalid = isValid(arr, k, mid);
if (isvalid) {
ans = mid;
hi = mid - 1;
} else {
lo = mid + 1;
}
}
return ans;
}
private static boolean isValid(long[] arr, long k, long mid) {
long sum = 0;
int noOfstudents = 1;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
if (sum > mid) {
noOfstudents++;
sum = arr[i];
if (noOfstudents > k) {
return false;
}
}
}
return true;
}