#include #include #include using namespace std; const int MAXN = 5000 + 10; int Tn, n, k, a[MAXN], seg_or[MAXN][MAXN], p[MAXN][MAXN]; long long dp[MAXN][MAXN]; int main () { ios_base::sync_with_stdio(false); cin >> Tn; while (Tn--) { cin >> n >> k; for(int i = 1; i <= n; i++) cin >> a[i]; for(int i = 1; i <= n; i++) { seg_or[i][i] = a[i]; for(int j = i + 1; j <= n; j++) seg_or[i][j] = seg_or[i][j - 1] | a[j]; } for(int i = 0; i <= n; i++) { for(int j = 0; j <= k; j++) dp[j][i] = 0; p[0][i] = 1; } for(int j = 0; j <= k; j++) p[j][n + 1] = n; for(int i = 1; i <= k; i++) { for(int j = n; j >= 1; j--) { for(int t = max(1, p[i - 1][j]); t <= p[i][j + 1]; t++) if (dp[i - 1][t - 1] + seg_or[t][j] >= dp[i][j]) { dp[i][j] = dp[i - 1][t - 1] + seg_or[t][j]; p[i][j] = t; } } } cout << dp[k][n] << endl; } return 0; }