import
java.util.*;
class
GFG{
static
int
MAX =
100005
;
static
int
[]seg =
new
int
[
4
* MAX];
static
void
build(
int
node,
int
l,
int
r,
int
a[])
{
if
(l == r)
seg[node] = a[l];
else
{
int
mid = (l + r) /
2
;
build(
2
* node, l, mid, a);
build(
2
* node +
1
, mid +
1
, r, a);
seg[node] = (seg[
2
* node] |
seg[
2
* node +
1
]);
}
}
static
int
query(
int
node,
int
l,
int
r,
int
start,
int
end,
int
a[])
{
if
(l > end || r < start)
return
0
;
if
(start <= l && r <= end)
return
seg[node];
int
mid = (l + r) /
2
;
return
((query(
2
* node, l, mid,
start, end, a)) |
(query(
2
* node +
1
, mid +
1
,
r, start, end, a)));
}
static
void
orsum(
int
a[],
int
n,
int
q,
int
k[])
{
build(
1
,
0
, n -
1
, a);
for
(
int
j =
0
; j < q; j++)
{
int
i = k[j] % (n /
2
);
int
sec = query(
1
,
0
, n -
1
,
n /
2
- i,
n - i -
1
, a);
int
first = (query(
1
,
0
, n -
1
,
0
,
n /
2
-
1
- i, a) |
query(
1
,
0
, n -
1
,
n - i, n -
1
, a));
int
temp = sec + first;
System.out.print(temp + "
");
}
}
public
static
void
main(String[] args)
{
int
a[] = {
7
,
44
,
19
,
86
,
65
,
39
,
75
,
101
};
int
n = a.length;
int
q =
2
;
int
k[] = {
4
,
2
};
orsum(a, n, q, k);
}
}