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.io.*;
import java.util.*;


public class Solution {
	static int inf = (int) 1e6;
	static int np = 2 * inf;
	
    public static void main(String[] args) {
        MyScanner sc = new MyScanner();
        out = new PrintWriter(new BufferedOutputStream(System.out));

        //-------------------------------------------------------------//
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[] x = new int[m];
        int[] y = new int[m];
        
        for(int i=0; i<m; i++) {
        	x[i] = sc.nextInt();
        	y[i] = sc.nextInt();
        }
        
        boolean f1[] = new boolean[m];
        boolean f2[] = new boolean[m];
        boolean g1[] = new boolean[m];
        boolean g2[] = new boolean[m];
        
        boolean ans = false;
        
        for(int i=0; i<m; i++) {
        	if(x[0] == x[i] || x[0] == y[i]) f1[i] = true;
        }
        
        int j;
        
    	for(j=0; j<m; j++) if(!f1[j]) break;
    	if(j == m) ans = true;
        
    	if(!ans) {
    		for(int i=0; i<m; i++) {
    			if(x[j] == x[i] || x[j] == y[i]) g1[i] = true;
    		}
    		
    		boolean pans = true;

    		for(int i=0; i<m; i++) {
    			if(!f1[i] && !g1[i]) {pans = false; break;}
    		}
    		
    		if(pans) ans = true;
    		
    		if(!ans) {
    			for(int i=0; i<m; i++) {
        			if(y[j] == x[i] || y[j] == y[i]) g2[i] = true;
        		}
        		
        		boolean pans2 = true;
        		
        		for(int i=0; i<m; i++) {
        			if(!f1[i] && !g2[i]) {pans2 = false; break;}
        		}
        		
        		if(pans2) ans = true;
    		}
    	}
    	
    	
    	
        if(!ans) {
        	for(int i=0; i<m; i++) {
            	if(y[0] == x[i] || y[0] == y[i]) f2[i] = true;
            }
        	
        	for(j=0; j<m; j++) if(!f2[j]) break;
        	if(j == m) ans = true;
        	
        	if(!ans) {
        		for(int i=0; i<m; i++) {
        			if(x[j] == x[i] || x[j] == y[i]) g1[i] = true;
        		}
        		
        		boolean pans = true;

        		for(int i=0; i<m; i++) {
        			if(!f2[i] && !g1[i]) {pans = false; break;}
        		}
        		
        		if(pans) ans = true;
        		
        		if(!ans) {
        			for(int i=0; i<m; i++) {
            			if(y[j] == x[i] || y[j] == y[i]) g2[i] = true;
            		}
            		
            		boolean pans2 = true;
            		
            		for(int i=0; i<m; i++) {
            			if(!f2[i] && !g2[i]) {pans2 = false; break;}
            		}
            		
            		if(pans2) ans = true;
        		}
        	}
        }
     
        if(ans) System.out.println("YES");
        else System.out.println("NO");
        //------------------------------------------------------------//
        out.close();
    }
    
    
    static long gcd(long a, long b) {
    	return (b == 0) ? a : gcd(b, a%b);
    }
    
    
    //-----------PrintWriter for faster output---------------------------------
    public static PrintWriter out;
}



//-----------MyScanner class for faster input----------
class MyScanner {
    BufferedReader br;
    StringTokenizer st;

    public MyScanner()
    {
        br = new BufferedReader(new InputStreamReader(System.in));
    }

    String next()
    {
        while (st == null || !st.hasMoreElements())
        {
            try {
                st = new StringTokenizer(br.readLine());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return st.nextToken();
    }

    int nextInt()
    {
        return Integer.parseInt(next());
    }

    long nextLong()
    {
        return Long.parseLong(next());
    }

    double nextDouble()
    {
        return Double.parseDouble(next());
    }

    String nextLine()
    {
        String str = "";
        try {
            str = br.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return str;
    }

}


class Pair {
	int v, c;
	
	Pair(int vi, int ci) {
		v = vi;
		c = ci;
	}
}

class PairComparator implements Comparator<Pair> {
	public int compare(Pair a, Pair b) {
		if(a.c > b.c) return 1;
		if(a.c < b.c) return -1;
		return 0;
	}
}

//class Pair implements Comparable<Pair>{
//    int s;
//    long e;
//
//    Pair(int s, long e) {
//    	this.s = s;
//    	this.e = e;
//    }
//    
//    public int compareTo(Pair p){
//        if(this.e > p.e) return 1;
//        else if(this.e < p.e) return -1;
//        else if(this.s > p.s) return 1;
//        else if(this.s < p.s) return -1;
//        return 0;
//    }
//}