수열의 OR 점수

배열을 K개의 연속한 비어 있지 않은 그룹으로 나누고, 각 그룹의 비트 OR 값 합이 최대가 되도록 한다.

보통6동적 계획법비트 연산누적 합아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

크기가 NN인 수열 AA와 정수 KK가 주어진다. 이 수열을 연속하고 비어 있지 않은 KK개의 그룹으로 나눈다. 수열의 모든 원소는 정확히 한 그룹에 속해야 한다.

각 그룹은 두 정수 LLRR로 나타내고, LL번째 수부터 RR번째 수까지가 그 그룹에 속한다는 뜻이다. 그룹의 점수는 그룹에 속한 모든 원소를 비트 OR 한 값이다.

수열의 OR 점수는 모든 그룹의 점수를 더한 값이다.

수열을 연속하고 비어 있지 않은 KK개의 그룹으로 나누어 수열의 OR 점수의 최댓값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 NNKK가 주어진다. (1N50001 \le N \le 5\,000, 1KN1 \le K \le N)

둘째 줄에 수열의 원소 A1,A2,,ANA_1, A_2, \dots, A_N이 공백으로 구분되어 주어진다. (0Ai2300 \le A_i \le 2^{30})

출력

수열의 OR 점수의 최댓값을 출력한다.

힌트

첫 번째 예제는 (1,2)(1, 2)(2)(2)로 나누면 점수가 (1 OR 2)+2=3+2=5(1 \text{ OR } 2) + 2 = 3 + 2 = 5이다.

두 번째 예제는 (1,2)(1, 2), (3)(3), (4)(4)로 나누면 점수가 (1 OR 2)+3+4=3+3+4=10(1 \text{ OR } 2) + 3 + 4 = 3 + 3 + 4 = 10이다.

세 번째 예제는 (1)(1)(2)(2)로 나누는 방법밖에 없다.