import java.io.InputStream; import java.io.PrintStream; import java.io.PrintWriter; import java.io.IOException; import java.math.BigInteger; import java.awt.Point; import java.util.*; public final class Main { private static final boolean autoFlush = false; private static final SimpleScanner sc = new SimpleScanner( System.in ); private static final SimplePrinter out = new SimplePrinter( System.out, autoFlush ); public static void main(String[] args){ int N = sc.nextInt(); int M = sc.nextInt(); int[] P = sc.nextInt(N); BitSet[] isFriend = new BitSet[N]; for(int i=0;i0){ int A = sc.nextInt()-1; int B = sc.nextInt()-1; isFriend[A].set(B); isFriend[B].set(A); } int Q = sc.nextInt(); while(Q-->0){ int X = sc.nextInt()-1; int Y = sc.nextInt()-1; if(P[X]==P[Y]){ out.println("No"); continue; } boolean flag = false; int index = 0; while((index=isFriend[X].nextSetBit(index))!=-1){ if(P[index]==P[Y]){ P[X] = P[Y]; flag = true; break; } index++; } out.println(flag?"Yes":"No"); } out.close(); } } /* / ̄\ | | \_/ | /  ̄  ̄ \ / \ / \ / ⌒ ⌒ \ よくぞこの提出結果を開いてくれた | (__人__) | 褒美としてオプーナを買う権利をやる \ `⌒´ / ☆ /ヽ、--ー、__, -‐ ´ \─/ / > ヽ▼●▼<\ ||ー、. /ヽ、 \ i |。| |/ ヽ (ニ、`ヽ. l ヽ l |。| | r-、y `ニ ノ \ l | |ー─ |  ̄ l `~ヽ_ノ__ / ̄ ̄ ̄ ̄ヽ-'ヽ--' / オープナ /| | ̄ ̄ ̄ ̄ ̄ ̄|/| | ̄ ̄ ̄ ̄ ̄ ̄|/| ______ / ̄オプーナ/| ̄|__」/_オープナ /| ̄|__,」__ /| | ̄ ̄ ̄ ̄ ̄|/オープナ ̄/ ̄ ̄ ̄ ̄|/オプーナ /| / | | ̄ ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄ ̄|/l ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄ ̄|/| / | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| */ /*//////////////////////////////////////////////// * My Library * @author viral *///////////////////////////////////////////////// // MyScanner final class SimpleScanner { final private int buff_size = 1 << 12; private final InputStream is; private final byte[] buff; private int point, length; public SimpleScanner ( InputStream is ) { this.is = is; buff = new byte[buff_size]; point = length = 0; } private void reload () { do { try { length = is.read( buff, point = 0, buff_size ); } catch ( IOException e ) { e.printStackTrace(); System.exit( 1 ); } } while ( length == -1 ); } private byte read () { if ( point == length ) { reload(); } return buff[point++]; } public byte nextByte () { byte c = read(); while ( c <= ' ' ) { c = read(); } return c; } public int nextInt () { int ans = 0; byte c = read(); while ( c <= ' ' ) { c = read(); } boolean negate = c == '-'; if ( c == '-' ) { c = read(); } while ( '0' <= c && c <= '9' ) { ans = ans * 10 + c - '0'; c = read(); } return negate ? -ans : ans; } public long nextLong () { long ans = 0; byte c = read(); while ( c <= ' ' ) { c = read(); } boolean negate = c == '-'; if ( c == '-' ) { c = read(); } while ( '0' <= c && c <= '9' ) { ans = ans * 10 + c - '0'; c = read(); } return negate ? -ans : ans; } public char nextChar () { byte c = read(); while ( c <= ' ' ) { c = read(); } return ( char )c; } public String next () { StringBuilder ans = new StringBuilder(); byte c = read(); while ( c <= ' ' ) { c = read(); } while ( c > ' ' ) { ans.append( ( char )c ); c = read(); } return ans.toString(); } public byte[] nextByte ( int n ) { byte[] ans = new byte[n]; for ( int i = 0; i < n; ++i ) { ans[i] = nextByte(); } return ans; } public int[] nextInt ( int n ) { int[] ans = new int[n]; for ( int i = 0; i < n; ++i ) { ans[i] = nextInt(); } return ans; } public long[] nextLong ( int n ) { long[] ans = new long[n]; for ( int i = 0; i < n; ++i ) { ans[i] = nextLong(); } return ans; } public String[] next ( int n ) { String[] ans = new String[n]; for ( int i = 0; i < n; ++i ) { ans[i] = next(); } return ans; } public byte[][] nextByte ( int n, int m ) { byte[][] ans = new byte[n][]; for ( int i = 0; i < n; ++i ) { ans[i] = nextByte( m ); } return ans; } public int[][] nextInt ( int n, int m ) { int[][] ans = new int[n][]; for ( int i = 0; i < n; ++i ) { ans[i] = nextInt( m ); } return ans; } public long[][] nextLong ( int n, int m ) { long[][] ans = new long[n][]; for ( int i = 0; i < n; ++i ) { ans[i] = nextLong( m ); } return ans; } public String[][] next ( int n, int m ) { String[][] ans = new String[n][]; for ( int i = 0; i < n; ++i ) { ans[i] = next( m ); } return ans; } public char[] nextCharArray () { return next().toCharArray(); } public char[][] nextCharArray ( int n ) { char[][] ans = new char[n][]; for ( int i = 0; i < n; ++i ) { ans[i] = nextCharArray(); } return ans; } public int[][] nextGraph ( int N, int M ) { if ( M == 0 ) { return new int[N + 1][0]; } int[][] ans = new int[N + 1][]; int[] count = new int[N + 1]; int[][] path = nextInt( M, 2 ); for ( int[] temp: path ) { ++count[temp[0]]; ++count[temp[1]]; } for ( int i = 1; i <= N; ++i ) { ans[i] = new int[count[i]]; } for ( int[] temp: path ) { ans[temp[0]][--count[temp[0]]] = temp[1]; ans[temp[1]][--count[temp[1]]] = temp[0]; } ans[0] = new int[0]; return ans; } public void close () { try { is.close(); } catch ( IOException e ) { e.printStackTrace(); System.exit( 1 ); } } } // MyPrinter final class SimplePrinter extends PrintWriter { public SimplePrinter ( PrintStream os ) { super( os ); } public SimplePrinter ( PrintStream os, boolean bool ) { super( os, bool ); } public void println ( int[] array ) { println( array, ' ' ); } public void println ( int[] array, String str ) { print( array[0] ); for ( int i = 1; i < array.length; ++i ) { print( str ); print( array[i] ); } println(); } public void println ( int[] array, char c ) { print( array[0] ); for ( int i = 1; i < array.length; ++i ) { print( c ); print( array[i] ); } println(); } public void println ( int[][] array ) { println( array, ' ' ); } public void println ( int[][] arrays, String str ) { for ( int[] array: arrays ) { println( array, str ); } } public void println ( int[][] arrays, char c ) { for ( int[] array: arrays ) { println( array, c ); } } public void println ( long[] array ) { println( array, ' ' ); } public void println ( long[] array, String str ) { print( array[0] ); for ( int i = 1; i < array.length; ++i ) { print( str ); print( array[i] ); } println(); } public void println ( long[] array, char c ) { print( array[0] ); for ( int i = 1; i < array.length; ++i ) { print( c ); print( array[i] ); } println(); } public void println ( long[][] array ) { println( array, ' ' ); } public void println ( long[][] arrays, String str ) { for ( long[] array: arrays ) { println( array, str ); } } public void println ( long[][] arrays, char c ) { for ( long[] array: arrays ) { println( array, c ); } } public void println ( char[] cs, String str ) { print( cs[0] ); for ( int i = 1; i < cs.length; ++i ) { print( str ); print( cs[i] ); } println(); } public void println ( char[] cs, char c ) { print( cs[0] ); for ( int i = 1; i < cs.length; ++i ) { print( c ); print( cs[i] ); } println(); } public void println ( char[][] cs ) { for ( char[] c: cs ) { println( c ); } } public void println ( char[][] cs, String str ) { print( cs[0] ); for ( int i = 1; i < cs.length; ++i ) { print( str ); print( cs[i] ); } println(); } public void println ( char[][] cs, char c ) { print( cs[0] ); for ( int i = 1; i < cs.length; ++i ) { print( c ); print( cs[i] ); } println(); } public void println ( E[] array ) { println( array, ' ' ); } public void println ( E[] array, String str ) { print( array[0] ); for ( int i = 1; i < array.length; ++i ) { print( str ); print( array[i] ); } println(); } public void println ( E[] array, char c ) { print( array[0] ); for ( int i = 1; i < array.length; ++i ) { print( c ); print( array[i] ); } println(); } public void println ( E[][] arrays ) { println( arrays, ' ' ); } public void println ( E[][] arrays, String str ) { for ( E[] array: arrays ) { println( array, str ); } } public void println ( E[][] arrays, char c ) { for ( E[] array: arrays ) { println( array, c ); } } }