Toad Ivan has m pairs of integers, each integer is between 1 and n, inclusive. The pairs are (a_1, b_1), (a_2, b_2), …, (a_m, b_m). 

He asks you to check if there exist two integers x and y (1 ≤ x < y ≤ n) such that in each given pair at least one integer is equal to x or y.

Input

The first line contains two space-separated integers n and m (2 ≤ n ≤ 300 000, 1 ≤ m ≤ 300 000) — the upper bound on the values of integers in the pairs, and the number of given pairs.

The next m lines contain two integers each, the i-th of them contains two space-separated integers a_i and b_i (1 ≤ a_i, b_i ≤ n, a_i ≠ b_i) — the integers in the i-th pair.

Output

Output "YES" if there exist two integers x and y (1 ≤ x < y ≤ n) such that in each given pair at least one integer is equal to x or y. Otherwise, print "NO". You can print each letter in any case (upper or lower).

Examples

Input


4 6
1 2
1 3
1 4
2 3
2 4
3 4


Output


NO


Input


5 4
1 2
2 3
3 4
4 5


Output


YES


Input


300000 5
1 2
1 2
1 2
1 2
1 2


Output


YES

Note

In the first example, you can't choose any x, y because for each such pair you can find a given pair where both numbers are different from chosen integers.

In the second example, you can choose x=2 and y=4.

In the third example, you can choose x=1 and y=2.
				
import java.util.*;import java.io.*;import java.math.*;
public class Main
{
	static class Pair{
		int a,b;
		Pair(int a,int b){
			this.a=a;
			this.b=b;
		}
	}

	public static void process()throws IOException
    {
    	int n=ni(),m=ni();
    	Pair arr[]=new Pair[m+1];
    	for(int i=1;i<=m;i++)
    		arr[i]=new Pair(ni(),ni());
    	int f[]=new int[n+1];

    	int ans1=arr[1].a;
    	f[ans1]++;
    	for(int i=2;i<=m;i++){
    		if(arr[i].a==ans1 || arr[i].b==ans1)
    			f[ans1]++;
    		else{
    			f[arr[i].a]++;
    			f[arr[i].b]++;
    		}
    	}

    	for(int i=1;i<=n;i++){
    		if (ans1==i) {
    			continue;
    		}

    		if(f[i]+f[ans1]>=m){
    			pn("YES");
    			return;
    		}
    	}

    	Arrays.fill(f,0);

    	ans1=arr[1].b;
    	f[ans1]++;
    	for(int i=2;i<=m;i++){
    		if(arr[i].a==ans1 || arr[i].b==ans1)
    			f[ans1]++;
    		else{
    			f[arr[i].a]++;
    			f[arr[i].b]++;
    		}
    	}

    	for(int i=1;i<=n;i++){
    		if (ans1==i) {
    			continue;
    		}

    		if(f[i]+f[ans1]>=m){
    			pn("YES");
    			return;
    		}
    	}

    	pn("NO");
    }


   	static AnotherReader sc;

    public static void main(String[]args)throws IOException
    {
    	boolean oj = System.getProperty("ONLINE_JUDGE") != null;
    	if(oj)
        	sc=new AnotherReader();
        else
        	sc=new AnotherReader(100);
        int t=1;
        while(t-->0)
            process();
        System.out.flush();
        System.out.close();  
    }

    static void pn(Object o){System.out.println(o);}
    static void p(Object o){System.out.print(o);}
    static void pni(Object o){System.out.println(o);System.out.flush();}
    static int ni()throws IOException{return sc.nextInt();}
    static long nl()throws IOException{return sc.nextLong();}
    static double nd()throws IOException{return sc.nextDouble();}
    static String nln()throws IOException{return sc.nextLine();}
    static long gcd(long a, long b)throws IOException{return (b==0)?a:gcd(b,a%b);}
    static int gcd(int a, int b)throws IOException{return (b==0)?a:gcd(b,a%b);}
    static int bit(long n)throws IOException{return (n==0)?0:(1+bit(n&(n-1)));}
    static boolean multipleTC=false;



/////////////////////////////////////////////////////////////////////////////////////////////////////////

    static class AnotherReader{BufferedReader br; StringTokenizer st;
    AnotherReader()throws FileNotFoundException{
    br=new BufferedReader(new InputStreamReader(System.in));}
    AnotherReader(int a)throws FileNotFoundException{
    br = new BufferedReader(new FileReader("input.txt"));}
    String next()throws IOException{
    while (st == null || !st.hasMoreElements()) {try{
    st = new StringTokenizer(br.readLine());}
    catch (IOException  e){ e.printStackTrace(); }}
    return st.nextToken(); } int nextInt() throws IOException{
    return Integer.parseInt(next());}
    long nextLong() throws IOException
    {return Long.parseLong(next());}
    double nextDouble()throws IOException { return Double.parseDouble(next()); }
    String nextLine() throws IOException{ String str = ""; try{
    str = br.readLine();} catch (IOException e){
    e.printStackTrace();} return str;}}
    
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
	
	