import
java.util.*;
class
Main {
static
boolean
check(
int
mid,
int
N,
int
[][] B,
int
M,
int
[] Q) {
int
[] pre =
new
int
[N +
1
];
for
(
int
i =
0
; i < mid; i++)
pre[Q[i]] =
1
;
for
(
int
i =
1
; i <= N; i++)
pre[i] = pre[i] + pre[i -
1
];
for
(
int
i =
0
; i < M; i++) {
int
sizeOfSegment = B[i][
1
] - B[i][
0
] +
1
;
int
numberOfOnes = pre[B[i][
1
]] - pre[B[i][
0
] -
1
];
int
numberOfZeros = sizeOfSegment - numberOfOnes;
if
(numberOfOnes > numberOfZeros)
return
true
;
}
return
false
;
}
static
int
findMinimumQueries(
int
N,
int
[][] B,
int
M,
int
[] Q,
int
q) {
int
low =
1
, high = q;
int
min_query =
0
;
while
(high - low >
1
) {
int
mid = (low + high) /
2
;
if
(check(mid, N, B, M, Q)) {
min_query = mid;
high = mid -
1
;
}
else
{
low = mid +
1
;
}
}
return
min_query;
}
public
static
void
main(String[] args) {
int
N =
5
;
int
[][] B = { {
1
,
2
}, {
4
,
5
}, {
1
,
5
}, {
1
,
3
}, {
2
,
4
} };
int
M =
5
;
int
[] Q = {
5
,
3
,
1
,
2
,
4
};
int
q =
5
;
System.out.println(findMinimumQueries(N, B, M, Q, q));
int
N1 =
5
;
int
[][] B1 = { {
1
,
5
}, {
1
,
3
} };
int
M1 =
2
;
int
[] Q1 = {
4
,
1
,
2
,
3
,
5
};
int
q1 =
5
;
System.out.println(findMinimumQueries(N1, B1, M1, Q1, q1));
}
}