/*

    /////    /////            //////////////////
    /////   /////             //////////////////
    /////  /////              /////   
    ///// /////               /////
    //////////        o       /////
    /////\\\\\                /////
    ///// \\\\\               /////   
    /////  \\\\\              //////////////////
    /////   \\\\\             //////////////////


    date updated : 20-10-2020

*/

#pragma warning(disable:4996)
#pragma comment(linker, "/STACK:336777216")
#pragma GCC optimize("Ofast")
 
#include<bits/stdc++.h>
using namespace std;
#define int long long int
#define endl '\n'
#define PI 3.14159265359
#define boostIO ios_base::sync_with_stdio(false), cin.tie(NULL)
#define deb(i) cout << "#i : " << i << endl
#define deb2(i, n) cout << "#i : " << i << " #n : " << n << endl
#define rep(i,a,b) for(int i = a; i < b; i++)
#define vi vector<int>
#define iv(vec) for(auto &c : vec) cin >> c;
#define sint set<int> 
#define in insert 
#define finds(e, s) find(e.begin(), e.end(), s)
#define pb push_back
#define pii pair<int, int>
#define F first
#define S second
#define setbits(x) __builtin_popcount(x)
#define setbitsll(x) __builtin_popcountll(x)
#define all(x) x.begin(),x.end()
#define sortf(c) sort(c.begin(), c.end())
#define sortr(c) sort(c.begin(), c.end(), greater<>())
#define reset(x,v) memset(x,v,sizeof(x))
#define sz(x) ((int)(x).size())

inline int min(int a, int b) { return (a < b) ? a : b;}
inline int max(int a, int b) { return (a > b) ? a : b;}
inline int gcd(int a, int b){if(a==0) return b;return gcd(b%a,a);}

template<typename T, typename... Args>
T sum(T a, Args... args) { return a + sum(args...); }

long long power(long long a, long long b) {
    long long res = 1;
    while (b > 0) {
        if (b & 1)
            res = res * a;
        a = a * a;
        b >>= 1;
    }
    return res;
}

const int dx[] = { -1, 0, 1, 0 };
const int dy[] = { 0, 1, 0, -1 };

const int MOD =998244353;
const int hell=1000000007;
const int N = 100005;
const int INF = 1e18;

/*________________________________________________________________________________*/

void ___solve() {

        int x, y; cin >> x >> y;
        if(abs(x-y) < 3) cout << "Yes" << endl;
        else cout << "No" << endl;
}

int32_t main(int32_t argc, char* argv[])
{
    boostIO;
    cin.exceptions(cin.failbit);
    //FILE *fin = freopen("in","r",stdin);
    //FILE *fout = freopen("out","w",stdout);
    int TT = 1;
    //cin >> TT;
    while(TT--) {

        ___solve();
    }
    return 0;
}
#include<bits/stdc++.h>
#define x first
#define y second
#define all(x) (x).begin(),(x).end()
#define sz(x) (int)(x).size()
#define mem(x,val) memset(x,val,sizeof x)
#define pii pair<int,int>
#define pb emplace_back
#define ar array
#define int long long
#define FOR(i, a, b) for(int i = a; i < b; i++)
#define F0R(i, n) FOR(i, 0, n)
#define FOR1(i, n) FOR(i, 1, n+1)
#define wopen(x) freopen((x),"w",stdout)
#define ropen(x) freopen((x),"r",stdin)
using namespace std;
const int dx[] = {1, 0, -1, 0}, dy[] = {0, 1, 0, -1};

const int N = 4e5 + 5;
int n, a, b, cnt, ist, ans;
vector<int> g[N];
bitset<N> vis;

void dfs(int u, int p = 0){
    cnt++;
    for(int v : g[u]){
        if(v == p) continue;
        if(vis[v]) {
            ist = 0;
            continue;
        }
        vis[v] = 1;
        dfs(v, u);
    }
}

signed main(void){
    ios_base::sync_with_stdio(0); cin.tie(0);
    int n,m;
    cin>>n>>m;
    if(min(n,m)+3 > max(n,m)){
        cout<<"Yes";
    }
    else{
        cout<<"No";
    }
return 0;
}