import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.util.StringTokenizer;public class Main { public static void main(String[] args) { new Task().solve() ; }}class Task{InputReader in = new InputReader(System.in) ;PrintWriter out = new PrintWriter(System.out) ;int n , k , sum ;int[] value ;void solve(){int t = in.nextInt() ;while(t-- > 0){n = in.nextInt() ; k = in.nextInt() ; value = new int[n+1] ; sum = 0 ; for(int i = 1 ; i <= n ; i++){ value[i] = in.nextInt() ; sum += value[i] ; } out.println(binarySearch());}out.flush();}boolean judge(int targe){int nowsum = 0 ;int cnt = 1 ;for(int i = 1 ; i <= n ; i++){ if(value[i] > targe) return false ;if(nowsum + value[i] <= targe){nowsum += value[i] ;}else{nowsum = value[i] ;cnt++ ;}}return cnt <= k ;}int binarySearch(){int left = 0 , right = sum , res = -1 ; while(left <= right){int mid = (left + right) >> 1 ; if(judge(mid)){ res = mid ; right = mid - 1 ; } else left = mid + 1 ;}return res ; }}class InputReader { public BufferedReader reader; public StringTokenizer tokenizer; public InputReader(InputStream stream) { reader = new BufferedReader(new InputStreamReader(stream), 32768); tokenizer = new StringTokenizer(""); } private void eat(String s) { tokenizer = new StringTokenizer(s); } public String nextLine() { try { return reader.readLine(); } catch (Exception e) { return null; } } public boolean hasNext() { while (!tokenizer.hasMoreTokens()) { String s = nextLine(); if (s == null) return false; eat(s); } return true; } public String next() { hasNext(); return tokenizer.nextToken(); } public int nextInt() { return Integer.parseInt(next()); } public long nextLong() { return Long.parseLong(next()); } public double nextDouble() { return Double.parseDouble(next()); } public BigInteger nextBigInteger() { return new BigInteger(next()); } }