On her way to programming school tiger Dasha faced her first test — a huge staircase!

<image>

The steps were numbered from one to infinity. As we know, tigers are very fond of all striped things, it is possible that it has something to do with their color. So on some interval of her way she calculated two values — the number of steps with even and odd numbers. 

You need to check whether there is an interval of steps from the l-th to the r-th (1 ≤ l ≤ r), for which values that Dasha has found are correct.

Input

In the only line you are given two integers a, b (0 ≤ a, b ≤ 100) — the number of even and odd steps, accordingly.

Output

In the only line print "YES", if the interval of steps described above exists, and "NO" otherwise.

Examples

Input

2 3


Output

YES


Input

3 1


Output

NO

Note

In the first example one of suitable intervals is from 1 to 5. The interval contains two even steps — 2 and 4, and three odd: 1, 3 and 5.
import java.io.*;
import java.math.BigInteger;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.*;
import java.util.Map.Entry;
	
	
	 public class solution {
	    static boolean ans[]=new boolean[1000002];
	    static int count=0;
	    static int flag=0;
		static double eps=(double)1e-6;
		static long mod=(long)1e9+7;
		static int maxcount=0;
		static int index=0;
		static HashMap<Integer,Integer> hs=new HashMap<>();
		
		public static void main(String args[]){
			InputReader in = new InputReader(System.in);
			OutputStream outputStream = System.out;
			PrintWriter out = new PrintWriter(outputStream);
			Scanner sc=new Scanner(System.in);
			//----------My Code----------
			int even=in.nextInt();
			int odd=in.nextInt();
			if(even==0&&odd==0)
				System.out.println("NO");
			else if(Math.abs(even-odd)<=1){
				System.out.println("YES");
			}
			else
			System.out.println("NO");
			
			//-- -------------The End------------------
			out.close();
		}
		
		
		 static ArrayList<Integer> topologicalsort(int vis[],ArrayList<ArrayList<Integer>> arr,int indeg[]){
			ArrayList<Integer> ans=new ArrayList<>();
			TreeSet<Integer> ts=new TreeSet<>();
			int l=0;
			for(int i=1;i<=arr.size()-1;i++){
				if(indeg[i]==0){
					ts.add(i);
				}
			}
			while(l<=arr.size()&&!ts.isEmpty()){
			
			
				int k=ts.pollFirst();
				if(vis[k]==1)
				ans.add(k);
				for(int i=0;i<arr.get(k).size();i++)
				{
					int element=arr.get(k).get(i);
					indeg[element]--;
					if(indeg[element]==0)
						ts.add(element);
				}
			//System.out.println(ts);
			l++;
			}
			return ans;
		 }
		 
		static int recursiveBinarySearch(int[] sortedArray, int start, int end, int key) {
	
		while (start < end) {
				int mid = start + (end - start) / 2; 
				if (key < sortedArray[mid]) {
					end=mid-1;
	
				} else if (key >=sortedArray[mid]) {
					start=mid+1;
				}
			}
			return (start); 
		}
	
		static long modulo(long a,long b,long c) {
			long x=1;
			long y=a;
			while(b > 0){
				if(b%2 == 1){
					x=(x*y)%c;
				}
			
				y = (y*y)%c; // squaring the base
				b /= 2;
			}
			return  x%c;
		}
		
		
		static long gcd(long x, long y)
		
		{
			long r=0, a, b;
			a = (x > y) ? x : y; // a is greater number
			b = (x < y) ? x : y; // b is smaller number
			r = b;
			while(a % b != 0)
			{
				r = a % b;
				a = b;
				b = r;
			}
			return r;
		}
		static class Pair implements Comparable<Pair> {
			int x;
			int y;
			//int i;
			Pair(int  xx,int yy){
				
				x=xx;
				y=yy;
				//i=ii;
			}
			@Override
			public int compareTo(Pair arg0) {
			
				
				
					return -1*Integer.compare(this.y, arg0.y);
				
				
			}
		
		}
		static class InputReader {
			public BufferedReader reader;
			public StringTokenizer tokenizer;
	
			public InputReader(InputStream inputstream) {
				reader = new BufferedReader(new InputStreamReader(inputstream));
				tokenizer = null;
			}
	
			public String nextLine(){
				String fullLine=null;
				while (tokenizer == null || !tokenizer.hasMoreTokens()) {
					try {
						fullLine=reader.readLine();
					} catch (IOException e) {
						throw new RuntimeException(e);
					}
					return fullLine;
				}
				return fullLine;
			}
			public String next() {
				while (tokenizer == null || !tokenizer.hasMoreTokens()) {
					try {
						tokenizer = new StringTokenizer(reader.readLine());
					} catch (IOException e) {
						throw new RuntimeException(e);
					}
				}
				return tokenizer.nextToken();
			}
			public long nextLong() {
				return Long.parseLong(next());
			}
			public int nextInt() {
				return Integer.parseInt(next());
			}
		}
	} 