import java.io.IOException ;
import java.io.InputStream ;
import java.io.PrintWriter ;
import java.util.InputMismatchException ;
class FREQUENT {
static int n;
public static void main
( String [ ] args
) { InputReader s
= new InputReader
( System .
in ) ; n = s.nextInt ( ) ;
while ( true ) {
int q = s.nextInt ( ) ;
long [ ] a = new long [ n] ;
long count
= 0 , num
= Integer .
MAX_VALUE ; for ( int i = 0 ; i < n; i++ ) {
a[ i] = s.nextLong ( ) ;
if ( a[ i] != num) {
count++;
num = a[ i] ;
}
}
num = a[ 0 ] ;
long [ ] left = new long [ ( int ) count] ;
long [ ] right = new long [ ( int ) count] ;
long [ ] pre_tree = new long [ ( int ) count] ;
left[ 0 ] = 0 ;
int index = 0 ;
count = 1 ;
for ( int i = 0 ; i < n - 1 ; i++ ) {
if ( a[ i] == a[ i + 1 ] )
count++;
else {
// count++;
pre_tree[ index] = count;
count = 1 ;
right[ index] = i;
left[ ++ index] = i + 1 ;
}
}
pre_tree[ index] = count;
count = 1 ;
right[ index] = a.length - 1 ;
long tree[ ] ;
int temp = pre_tree.length ;
if ( ( temp & ( temp - 1 ) ) == 0 )
tree = new long [ 2 * temp - 1 ] ;
else {
temp
= ( int ) ( Math .
log ( temp
) / Math .
log ( 2 ) ) ; temp++;
temp = 1 << temp;
tree = new long [ 2 * temp - 1 ] ;
}
for ( int i = 0 ; i < tree.length ; i++ ) {
}
make_tree( pre_tree, tree, 0 , pre_tree.length - 1 , 0 ) ;
while ( q-- > 0 ) {
long l = s.nextLong ( ) , r = s.nextLong ( ) ;
l--;
r--;
long ans = 0 ;
int ql = binarySearch( left, l) ;
int qr = binarySearch( right, r) ;
if ( qr == - 1 ) {
ans = r - l + 1 ;
} else if ( left[ ql] != l && right[ qr] != r) {
long max1 = l - right[ ql] + 1 , max3 = r - left[ qr + 1 ] + 1 ;
long max2 = query( tree, ql + 1 , qr, 0 , pre_tree.length - 1 , 0 ) ;
ans
= Math .
max ( Math .
max ( max1, max2
) , max3
) ;
} else if ( left[ ql] == l && right[ qr] != r) {
long max1 = query( tree, ql, qr, 0 , pre_tree.length - 1 , 0 ) ;
long max2 = r - left[ qr + 1 ] + 1 ;
ans
= Math .
max ( max1, max2
) ; } else if ( left[ ql] != l && right[ qr] == r) {
long max1 = query( tree, ql + 1 , qr, 0 , pre_tree.length - 1 , 0 ) ;
long max2 = right[ ql] - l + 1 ;
ans
= Math .
max ( max1, max2
) ; } else {
ans = query( tree, ql, qr, 0 , pre_tree.length - 1 , 0 ) ;
}
w.println ( ans) ;
}
n = s.nextInt ( ) ;
if ( n == 0 )
break ;
}
w.close ( ) ;
}
static int binarySearch( long a[ ] , long key) {
int low = 0 , high = a.length - 1 ;
while ( low <= high) {
int mid = ( low + high) / 2 ;
if ( a[ mid] == key) {
high = mid;
break ;
} else if ( a[ mid] > key)
high = mid - 1 ;
else
low = mid + 1 ;
}
return high;
}
static void make_tree( long [ ] a, long [ ] tree, int low, int high, int pos) {
if ( low == high) {
tree[ pos] = a[ low] ;
return ;
}
int mid = ( low + high) >> 1 ;
make_tree( a, tree, low, mid, 2 * pos + 1 ) ;
make_tree( a, tree, mid + 1 , high, 2 * pos + 2 ) ;
if ( tree[ 2 * pos + 1 ] > tree[ 2 * pos + 2 ] )
tree[ pos] = tree[ 2 * pos + 1 ] ;
else
tree[ pos] = tree[ 2 * pos + 2 ] ;
}
static long query( long [ ] tree, long qlow, long qhigh, long low, long high, long pos) {
if ( qlow <= low && qhigh >= high)
return tree[ ( int ) pos] ;
if ( qlow > high || qhigh < low) {
}
long mid = ( low + high) >> 1 ;
long q1 = query( tree, qlow, qhigh, low, mid, 2 * pos + 1 ) ;
long q2 = query( tree, qlow, qhigh, mid + 1 , high, 2 * pos + 2 ) ;
}
}
class InputReader {
private final byte [ ] buf = new byte [ 8192 ] ;
private int cc, sc;
private SpaceCharFilter f;
this .st = st;
}
public int t( ) {
if ( sc == - 1 )
throw new InputMismatchException( ) ;
if ( cc >= sc) {
cc = 0 ;
try {
sc = st.read ( buf) ;
throw new InputMismatchException( ) ;
}
if ( sc <= 0 )
return - 1 ;
}
return buf[ cc++ ] ;
}
public int nextInt( ) {
int c = t( ) ;
while ( isSpaceChar( c) ) {
c = t( ) ;
}
int sgn = 1 ;
if ( c == '-' ) {
sgn = - 1 ;
c = t( ) ;
}
int res = 0 ;
do {
res *= 10 ;
res += c - '0' ;
c = t( ) ;
} while ( ! isSpaceChar( c) ) ;
return res * sgn;
}
public long nextLong( ) {
int c = t( ) ;
while ( isSpaceChar( c) ) {
c = t( ) ;
}
int sgn = 1 ;
if ( c == '-' ) {
sgn = - 1 ;
c = t( ) ;
}
long res = 0 ;
do {
res *= 10 ;
res += c - '0' ;
c = t( ) ;
} while ( ! isSpaceChar( c) ) ;
return res * sgn;
}
public int [ ] nextIntArray( int n) {
int a[ ] = new int [ n] ;
for ( int i = 0 ; i < n; i++ ) {
a[ i] = nextInt( ) ;
}
return a;
}
int c = t( ) ;
while ( isSpaceChar( c) ) {
c = t( ) ;
}
StringBuilder res = new StringBuilder( ) ;
do {
res.appendCodePoint ( c) ;
c = t( ) ;
} while ( ! isSpaceChar( c) ) ;
return res.toString ( ) ;
}
int c = t( ) ;
while ( isSpaceChar( c) )
c = t( ) ;
StringBuilder res = new StringBuilder( ) ;
do {
res.appendCodePoint ( c) ;
c = t( ) ;
} while ( ! isEndOfLine( c) ) ;
return res.toString ( ) ;
}
public boolean isSpaceChar( int c) {
if ( f != null )
return f.isSpaceChar ( c) ;
return c == ' ' || c == '\n ' || c == '\r ' || c == '\t ' || c == - 1 ;
}
private boolean isEndOfLine( int c) {
return c == '\n ' || c == '\r ' || c == - 1 ;
}
public interface SpaceCharFilter {
public boolean isSpaceChar( int ch) ;
}
}
aW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CmltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwppbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKaW1wb3J0IGphdmEudXRpbC5JbnB1dE1pc21hdGNoRXhjZXB0aW9uOwoKY2xhc3MgRlJFUVVFTlQgewoJc3RhdGljIGludCBuOwoKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKCQlJbnB1dFJlYWRlciBzID0gbmV3IElucHV0UmVhZGVyKFN5c3RlbS5pbik7CgkJUHJpbnRXcml0ZXIgdyA9IG5ldyBQcmludFdyaXRlcihTeXN0ZW0ub3V0KTsKCQluID0gcy5uZXh0SW50KCk7CgkJd2hpbGUgKHRydWUpIHsKCQkJaW50IHEgPSBzLm5leHRJbnQoKTsKCQkJbG9uZ1tdIGEgPSBuZXcgbG9uZ1tuXTsKCQkJbG9uZyBjb3VudCA9IDAsIG51bSA9IEludGVnZXIuTUFYX1ZBTFVFOwoJCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewoJCQkJYVtpXSA9IHMubmV4dExvbmcoKTsKCQkJCWlmIChhW2ldICE9IG51bSkgewoJCQkJCWNvdW50Kys7CgkJCQkJbnVtID0gYVtpXTsKCQkJCX0KCQkJfQoJCQludW0gPSBhWzBdOwoJCQlsb25nW10gbGVmdCA9IG5ldyBsb25nWyhpbnQpIGNvdW50XTsKCQkJbG9uZ1tdIHJpZ2h0ID0gbmV3IGxvbmdbKGludCkgY291bnRdOwoJCQlsb25nW10gcHJlX3RyZWUgPSBuZXcgbG9uZ1soaW50KSBjb3VudF07CgkJCWxlZnRbMF0gPSAwOwoJCQlpbnQgaW5kZXggPSAwOwoJCQljb3VudCA9IDE7CgkJCWZvciAoaW50IGkgPSAwOyBpIDwgbiAtIDE7IGkrKykgewoJCQkJaWYgKGFbaV0gPT0gYVtpICsgMV0pCgkJCQkJY291bnQrKzsKCQkJCWVsc2UgewoJCQkJCS8vIGNvdW50Kys7CgkJCQkJcHJlX3RyZWVbaW5kZXhdID0gY291bnQ7CgkJCQkJY291bnQgPSAxOwoJCQkJCXJpZ2h0W2luZGV4XSA9IGk7CgkJCQkJbGVmdFsrK2luZGV4XSA9IGkgKyAxOwoJCQkJfQoKCQkJfQoJCQlwcmVfdHJlZVtpbmRleF0gPSBjb3VudDsKCgkJCWNvdW50ID0gMTsKCQkJcmlnaHRbaW5kZXhdID0gYS5sZW5ndGggLSAxOwoJCQlsb25nIHRyZWVbXTsKCQkJaW50IHRlbXAgPSBwcmVfdHJlZS5sZW5ndGg7CgkJCWlmICgodGVtcCAmICh0ZW1wIC0gMSkpID09IDApCgkJCQl0cmVlID0gbmV3IGxvbmdbMiAqIHRlbXAgLSAxXTsKCQkJZWxzZSB7CgkJCQl0ZW1wID0gKGludCkgKE1hdGgubG9nKHRlbXApIC8gTWF0aC5sb2coMikpOwoJCQkJdGVtcCsrOwoJCQkJdGVtcCA9IDEgPDwgdGVtcDsKCQkJCXRyZWUgPSBuZXcgbG9uZ1syICogdGVtcCAtIDFdOwoKCQkJfQoJCQlmb3IgKGludCBpID0gMDsgaSA8IHRyZWUubGVuZ3RoOyBpKyspIHsKCQkJCXRyZWVbaV0gPSAoSW50ZWdlci5NSU5fVkFMVUUpOwoJCQl9CgkJCW1ha2VfdHJlZShwcmVfdHJlZSwgdHJlZSwgMCwgcHJlX3RyZWUubGVuZ3RoIC0gMSwgMCk7CgkJCXdoaWxlIChxLS0gPiAwKSB7CgkJCQlsb25nIGwgPSBzLm5leHRMb25nKCksIHIgPSBzLm5leHRMb25nKCk7CgkJCQlsLS07CgkJCQlyLS07CgkJCQlsb25nIGFucyA9IDA7CgkJCQlpbnQgcWwgPSBiaW5hcnlTZWFyY2gobGVmdCwgbCk7CgkJCQlpbnQgcXIgPSBiaW5hcnlTZWFyY2gocmlnaHQsIHIpOwoJCQkJaWYgKHFyID09IC0xKSB7CgkJCQkJYW5zID0gciAtIGwgKyAxOwoJCQkJfSBlbHNlIGlmIChsZWZ0W3FsXSAhPSBsICYmIHJpZ2h0W3FyXSAhPSByKSB7CgoJCQkJCWxvbmcgbWF4MSA9IGwgLSByaWdodFtxbF0gKyAxLCBtYXgzID0gciAtIGxlZnRbcXIgKyAxXSArIDE7CgkJCQkJbG9uZyBtYXgyID0gcXVlcnkodHJlZSwgcWwgKyAxLCBxciwgMCwgcHJlX3RyZWUubGVuZ3RoIC0gMSwgMCk7CgkJCQkJYW5zID0gTWF0aC5tYXgoTWF0aC5tYXgobWF4MSwgbWF4MiksIG1heDMpOwoKCQkJCX0gZWxzZSBpZiAobGVmdFtxbF0gPT0gbCAmJiByaWdodFtxcl0gIT0gcikgewoJCQkJCWxvbmcgbWF4MSA9IHF1ZXJ5KHRyZWUsIHFsLCBxciwgMCwgcHJlX3RyZWUubGVuZ3RoIC0gMSwgMCk7CgkJCQkJbG9uZyBtYXgyID0gciAtIGxlZnRbcXIgKyAxXSArIDE7CgkJCQkJYW5zID0gTWF0aC5tYXgobWF4MSwgbWF4Mik7CgkJCQl9IGVsc2UgaWYgKGxlZnRbcWxdICE9IGwgJiYgcmlnaHRbcXJdID09IHIpIHsKCQkJCQlsb25nIG1heDEgPSBxdWVyeSh0cmVlLCBxbCArIDEsIHFyLCAwLCBwcmVfdHJlZS5sZW5ndGggLSAxLCAwKTsKCQkJCQlsb25nIG1heDIgPSByaWdodFtxbF0gLSBsICsgMTsKCQkJCQlhbnMgPSBNYXRoLm1heChtYXgxLCBtYXgyKTsKCQkJCX0gZWxzZSB7CgkJCQkJYW5zID0gcXVlcnkodHJlZSwgcWwsIHFyLCAwLCBwcmVfdHJlZS5sZW5ndGggLSAxLCAwKTsKCQkJCX0KCQkJCXcucHJpbnRsbihhbnMpOwoJCQl9CgkJCW4gPSBzLm5leHRJbnQoKTsKCQkJaWYgKG4gPT0gMCkKCQkJCWJyZWFrOwoJCX0KCQl3LmNsb3NlKCk7CgoJfQoKCXN0YXRpYyBpbnQgYmluYXJ5U2VhcmNoKGxvbmcgYVtdLCBsb25nIGtleSkgewoJCWludCBsb3cgPSAwLCBoaWdoID0gYS5sZW5ndGggLSAxOwoJCXdoaWxlIChsb3cgPD0gaGlnaCkgewoJCQlpbnQgbWlkID0gKGxvdyArIGhpZ2gpIC8gMjsKCQkJaWYgKGFbbWlkXSA9PSBrZXkpIHsKCQkJCWhpZ2ggPSBtaWQ7CgkJCQlicmVhazsKCQkJfSBlbHNlIGlmIChhW21pZF0gPiBrZXkpCgkJCQloaWdoID0gbWlkIC0gMTsKCQkJZWxzZQoJCQkJbG93ID0gbWlkICsgMTsKCQl9CgkJcmV0dXJuIGhpZ2g7CgoJfQoKCXN0YXRpYyB2b2lkIG1ha2VfdHJlZShsb25nW10gYSwgbG9uZ1tdIHRyZWUsIGludCBsb3csIGludCBoaWdoLCBpbnQgcG9zKSB7CgoJCWlmIChsb3cgPT0gaGlnaCkgewoJCQl0cmVlW3Bvc10gPSBhW2xvd107CgkJCXJldHVybjsKCQl9CgkJaW50IG1pZCA9IChsb3cgKyBoaWdoKSA+PiAxOwoJCW1ha2VfdHJlZShhLCB0cmVlLCBsb3csIG1pZCwgMiAqIHBvcyArIDEpOwoJCW1ha2VfdHJlZShhLCB0cmVlLCBtaWQgKyAxLCBoaWdoLCAyICogcG9zICsgMik7CgkJaWYgKHRyZWVbMiAqIHBvcyArIDFdID4gdHJlZVsyICogcG9zICsgMl0pCgkJCXRyZWVbcG9zXSA9IHRyZWVbMiAqIHBvcyArIDFdOwoJCWVsc2UKCQkJdHJlZVtwb3NdID0gdHJlZVsyICogcG9zICsgMl07Cgl9CgoJc3RhdGljIGxvbmcgcXVlcnkobG9uZ1tdIHRyZWUsIGxvbmcgcWxvdywgbG9uZyBxaGlnaCwgbG9uZyBsb3csIGxvbmcgaGlnaCwgbG9uZyBwb3MpIHsKCQlpZiAocWxvdyA8PSBsb3cgJiYgcWhpZ2ggPj0gaGlnaCkKCQkJcmV0dXJuIHRyZWVbKGludCkgcG9zXTsKCQlpZiAocWxvdyA+IGhpZ2ggfHwgcWhpZ2ggPCBsb3cpIHsKCQkJcmV0dXJuIChJbnRlZ2VyLk1JTl9WQUxVRSk7CgkJfQoJCWxvbmcgbWlkID0gKGxvdyArIGhpZ2gpID4+IDE7CgkJbG9uZyBxMSA9IHF1ZXJ5KHRyZWUsIHFsb3csIHFoaWdoLCBsb3csIG1pZCwgMiAqIHBvcyArIDEpOwoJCWxvbmcgcTIgPSBxdWVyeSh0cmVlLCBxbG93LCBxaGlnaCwgbWlkICsgMSwgaGlnaCwgMiAqIHBvcyArIDIpOwoJCXJldHVybiBNYXRoLm1heChxMSwgcTIpOwoKCX0KCn0KCmNsYXNzIElucHV0UmVhZGVyIHsKCglwcml2YXRlIGZpbmFsIElucHV0U3RyZWFtIHN0OwoJcHJpdmF0ZSBmaW5hbCBieXRlW10gYnVmID0gbmV3IGJ5dGVbODE5Ml07Cglwcml2YXRlIGludCBjYywgc2M7Cglwcml2YXRlIFNwYWNlQ2hhckZpbHRlciBmOwoKCXB1YmxpYyBJbnB1dFJlYWRlcihJbnB1dFN0cmVhbSBzdCkgewoJCXRoaXMuc3QgPSBzdDsKCX0KCglwdWJsaWMgaW50IHQoKSB7CgkJaWYgKHNjID09IC0xKQoJCQl0aHJvdyBuZXcgSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbigpOwoJCWlmIChjYyA+PSBzYykgewoJCQljYyA9IDA7CgkJCXRyeSB7CgkJCQlzYyA9IHN0LnJlYWQoYnVmKTsKCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewoJCQkJdGhyb3cgbmV3IElucHV0TWlzbWF0Y2hFeGNlcHRpb24oKTsKCQkJfQoJCQlpZiAoc2MgPD0gMCkKCQkJCXJldHVybiAtMTsKCQl9CgkJcmV0dXJuIGJ1ZltjYysrXTsKCX0KCglwdWJsaWMgaW50IG5leHRJbnQoKSB7CgkJaW50IGMgPSB0KCk7CgkJd2hpbGUgKGlzU3BhY2VDaGFyKGMpKSB7CgkJCWMgPSB0KCk7CgkJfQoJCWludCBzZ24gPSAxOwoJCWlmIChjID09ICctJykgewoJCQlzZ24gPSAtMTsKCQkJYyA9IHQoKTsKCQl9CgkJaW50IHJlcyA9IDA7CgkJZG8gewoJCQlyZXMgKj0gMTA7CgkJCXJlcyArPSBjIC0gJzAnOwoJCQljID0gdCgpOwoJCX0gd2hpbGUgKCFpc1NwYWNlQ2hhcihjKSk7CgkJcmV0dXJuIHJlcyAqIHNnbjsKCX0KCglwdWJsaWMgbG9uZyBuZXh0TG9uZygpIHsKCQlpbnQgYyA9IHQoKTsKCQl3aGlsZSAoaXNTcGFjZUNoYXIoYykpIHsKCQkJYyA9IHQoKTsKCQl9CgkJaW50IHNnbiA9IDE7CgkJaWYgKGMgPT0gJy0nKSB7CgkJCXNnbiA9IC0xOwoJCQljID0gdCgpOwoJCX0KCQlsb25nIHJlcyA9IDA7CgkJZG8gewoJCQlyZXMgKj0gMTA7CgkJCXJlcyArPSBjIC0gJzAnOwoJCQljID0gdCgpOwoJCX0gd2hpbGUgKCFpc1NwYWNlQ2hhcihjKSk7CgkJcmV0dXJuIHJlcyAqIHNnbjsKCX0KCglwdWJsaWMgaW50W10gbmV4dEludEFycmF5KGludCBuKSB7CgkJaW50IGFbXSA9IG5ldyBpbnRbbl07CgkJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKCQkJYVtpXSA9IG5leHRJbnQoKTsKCQl9CgkJcmV0dXJuIGE7Cgl9CgoJcHVibGljIFN0cmluZyByZWFkU3RyaW5nKCkgewoJCWludCBjID0gdCgpOwoJCXdoaWxlIChpc1NwYWNlQ2hhcihjKSkgewoJCQljID0gdCgpOwoJCX0KCQlTdHJpbmdCdWlsZGVyIHJlcyA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CgkJZG8gewoJCQlyZXMuYXBwZW5kQ29kZVBvaW50KGMpOwoJCQljID0gdCgpOwoJCX0gd2hpbGUgKCFpc1NwYWNlQ2hhcihjKSk7CgkJcmV0dXJuIHJlcy50b1N0cmluZygpOwoJfQoKCXB1YmxpYyBTdHJpbmcgbmV4dExpbmUoKSB7CgkJaW50IGMgPSB0KCk7CgkJd2hpbGUgKGlzU3BhY2VDaGFyKGMpKQoJCQljID0gdCgpOwoJCVN0cmluZ0J1aWxkZXIgcmVzID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKCQlkbyB7CgkJCXJlcy5hcHBlbmRDb2RlUG9pbnQoYyk7CgkJCWMgPSB0KCk7CgkJfSB3aGlsZSAoIWlzRW5kT2ZMaW5lKGMpKTsKCQlyZXR1cm4gcmVzLnRvU3RyaW5nKCk7Cgl9CgoJcHVibGljIGJvb2xlYW4gaXNTcGFjZUNoYXIoaW50IGMpIHsKCQlpZiAoZiAhPSBudWxsKQoJCQlyZXR1cm4gZi5pc1NwYWNlQ2hhcihjKTsKCQlyZXR1cm4gYyA9PSAnICcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJyB8fCBjID09ICdcdCcgfHwgYyA9PSAtMTsKCX0KCglwcml2YXRlIGJvb2xlYW4gaXNFbmRPZkxpbmUoaW50IGMpIHsKCQlyZXR1cm4gYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJyB8fCBjID09IC0xOwoJfQoKCXB1YmxpYyBpbnRlcmZhY2UgU3BhY2VDaGFyRmlsdGVyIHsKCQlwdWJsaWMgYm9vbGVhbiBpc1NwYWNlQ2hhcihpbnQgY2gpOwoJfQp9