import java.io.* ;
import java.util.* ;
/*
DO NOT REMOVE THIS COMMENT, OR THIS CODE WILL NOT WORK.
*/
class MyClass {
//using DP.
public static void solve
( ) throws Exception { int t
= Integer .
parseInt ( br.
readLine ( ) ) ; StringBuilder sb = new StringBuilder( "" ) ;
while ( t-- > 0 ) {
String [ ] ip
= br.
readLine ( ) .
split ( " " ) ; long c
= Long .
parseLong ( ip
[ 1 ] ) ; long [ ] arr= new long [ n] ;
ip= br.readLine ( ) .split ( " " ) ;
for ( int i= 0 ; i< n; i++ ) {
arr
[ i
] = Long .
parseLong ( ip
[ i
] ) ; }
if ( c== 0 ) sb.append ( "0\n " ) ;
else {
long [ ] [ ] dp= new long [ n] [ n] ;
long min
= Long .
MAX_VALUE ; for ( int j= 0 ; j< n; j++ ) {
for ( int i= j; i>= 0 ; i-- ) {
if ( i== j) {
dp[ i] [ j] = c- arr[ i] ;
if ( dp[ i] [ j] < 0 ) dp[ i] [ j] = c;
}
else {
dp[ i] [ j] = dp[ i+ 1 ] [ j] ;
if ( arr[ i] <= dp[ i+ 1 ] [ j] ) dp[ i] [ j] -= arr[ i] ;
}
min
= Math .
min ( min, dp
[ i
] [ j
] ) ; sb.
append ( String .
format ( "dp[%d][%d] is %d\n " ,i,j,dp
[ i
] [ j
] ) ) ; }
}
sb.append ( min+ "\n " ) ;
}
}
System .
out .
print ( sb.
toString ( ) ) ; }
solve( ) ;
}
}
aW1wb3J0IGphdmEuaW8uKjsKaW1wb3J0IGphdmEudXRpbC4qOwoKLyoKICBETyBOT1QgUkVNT1ZFIFRISVMgQ09NTUVOVCwgT1IgVEhJUyBDT0RFIFdJTEwgTk9UIFdPUksuCiovCmNsYXNzIE15Q2xhc3MgewoJCiAgICAvL3VzaW5nIERQLgogICAgcHVibGljIHN0YXRpYyB2b2lkIHNvbHZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CgkJQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKFN5c3RlbS5pbikpOwoJCWludCB0ID0gSW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCQlTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoIiIpOwoJCXdoaWxlICh0LS0gPiAwKSB7CgkJCVN0cmluZ1tdIGlwPWJyLnJlYWRMaW5lKCkuc3BsaXQoIiAiKTsKCQkJaW50IG4gPSBJbnRlZ2VyLnBhcnNlSW50KGlwWzBdKTsKCQkJbG9uZyBjID0gTG9uZy5wYXJzZUxvbmcoaXBbMV0pOwoJCQlsb25nW10gYXJyPW5ldyBsb25nW25dOwoJCQlpcD1ici5yZWFkTGluZSgpLnNwbGl0KCIgIik7CgkJCWZvcihpbnQgaT0wO2k8bjtpKyspewoJCQkJYXJyW2ldPUxvbmcucGFyc2VMb25nKGlwW2ldKTsKCQkJfQoJCQlpZihjPT0wKSBzYi5hcHBlbmQoIjBcbiIpOwoJCQllbHNlewoJCQkJbG9uZ1tdW10gZHA9bmV3IGxvbmdbbl1bbl07CgkJCQlsb25nIG1pbiA9IExvbmcuTUFYX1ZBTFVFOwoJCQkJZm9yKGludCBqPTA7ajxuO2orKyl7CgkJCQkJZm9yKGludCBpPWo7aT49MDtpLS0pewoJCQkJCQlpZihpPT1qKXsKCQkJCQkJCWRwW2ldW2pdID0gYy1hcnJbaV07CgkJCQkJCQlpZihkcFtpXVtqXTwwKSBkcFtpXVtqXSA9IGM7CgkJCQkJCX0KCQkJCQkJZWxzZXsKCQkJCQkJCWRwW2ldW2pdID0gZHBbaSsxXVtqXTsKCQkJCQkJCWlmKGFycltpXTw9ZHBbaSsxXVtqXSkgZHBbaV1bal0gLT0gYXJyW2ldOwoJCQkJCQl9CgkJCQkJCW1pbiA9IE1hdGgubWluKG1pbiwgZHBbaV1bal0pOwoJCQkJCQlzYi5hcHBlbmQoU3RyaW5nLmZvcm1hdCgiZHBbJWRdWyVkXSBpcyAlZFxuIixpLGosZHBbaV1bal0pKTsKCQkJCQl9CgkJCQl9CgkJCQlzYi5hcHBlbmQobWluKyJcbiIpOwoJCQl9CgkJfQoJCVN5c3RlbS5vdXQucHJpbnQoc2IudG9TdHJpbmcoKSk7Cgl9CgkKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb257CiAgICAgICAgc29sdmUoKTsKCX0gCn0=