unittest
{
	assert( [ "4 2", "2 5 2 5" ].parse.expand.solve == 12 );
	assert( [ "8 4", "9 1 8 2 7 5 6 4" ].parse.expand.solve == 32 );
}



import core.bitop;
import std.algorithm;
import std.conv;
import std.range;
import std.stdio;
import std.typecons;

void main()
{
	stdin.byLineCopy.parse.expand.solve.writeln;
}

auto parse( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	auto nk = input.front.split.to!( long[] );
	input.popFront;
	auto as = input.front.split.to!( long[] );
	return tuple( nk[ 1 ], as );
}

auto solve( long k, long[] as )
{
	// 部分列の美しさを全列挙
	auto cs = new long[ as.length.signed * ( as.length.signed + 1 ) / 2 ];
	auto ci = 0L;
	auto cm = 0L;
	foreach( i; 0L .. as.length )
	{
		auto t = 0L;
		foreach( a; as[ i .. $ ] )
		{
			t += a;
			cs[ ci ] = t;
			ci++;
			cm = max( cm, t );
		}
	}
	
	// 美しさのうち、できるだけ上位bitを立てられるものを選ぶ
	auto ans = 0L;
	for( auto b = 1L << cm.bsr; 0 < b; b >>= 1 )
	{
		// 最上位bitが立っているものを集める
		auto fs = new long[ cs.length ];
		auto fi = 0L;
		foreach( i, c; cs )
		{
			if( ( c & b ) == 0 ) continue;
			fs[ fi ] = c;
			fi++;
		}
		// 最上位bitが立っているものがk個以上なら、それらの中から選ぶ
		if( k <= fi )
		{
			cs = fs[ 0 .. fi ];
			ans |= b;
		}
	}
	return ans;
}
