배열을 K개의 연속한 비어 있지 않은 그룹으로 나누고, 각 그룹의 비트 OR 값 합이 최대가 되도록 한다.
크기가 NNN인 수열 AAA와 정수 KKK가 주어진다. 이 수열을 연속하고 비어 있지 않은 KKK개의 그룹으로 나눈다. 수열의 모든 원소는 정확히 한 그룹에 속해야 한다.
각 그룹은 두 정수 LLL과 RRR로 나타내고, LLL번째 수부터 RRR번째 수까지가 그 그룹에 속한다는 뜻이다. 그룹의 점수는 그룹에 속한 모든 원소를 비트 OR 한 값이다.
수열의 OR 점수는 모든 그룹의 점수를 더한 값이다.
수열을 연속하고 비어 있지 않은 KKK개의 그룹으로 나누어 수열의 OR 점수의 최댓값을 구하는 프로그램을 작성하시오.
첫째 줄에 NNN과 KKK가 주어진다. (1≤N≤5 0001 \le N \le 5\,0001≤N≤5000, 1≤K≤N1 \le K \le N1≤K≤N)
둘째 줄에 수열의 원소 A1,A2,…,ANA_1, A_2, \dots, A_NA1,A2,…,AN이 공백으로 구분되어 주어진다. (0≤Ai≤2300 \le A_i \le 2^{30}0≤Ai≤230)
수열의 OR 점수의 최댓값을 출력한다.
첫 번째 예제는 (1,2)(1, 2)(1,2)와 (2)(2)(2)로 나누면 점수가 (1 OR 2)+2=3+2=5(1 \text{ OR } 2) + 2 = 3 + 2 = 5(1 OR 2)+2=3+2=5이다.
두 번째 예제는 (1,2)(1, 2)(1,2), (3)(3)(3), (4)(4)(4)로 나누면 점수가 (1 OR 2)+3+4=3+3+4=10(1 \text{ OR } 2) + 3 + 4 = 3 + 3 + 4 = 10(1 OR 2)+3+4=3+3+4=10이다.
세 번째 예제는 (1)(1)(1)과 (2)(2)(2)로 나누는 방법밖에 없다.