#include <bits/stdc++.h>
using namespace std;

#define fio                           \
    ios_base::sync_with_stdio(false); \
    cin.tie(NULL);                    \
    cout.tie(NULL);
#define ll long long
#define ull unsigned long long
#define ld long double
#define endl "\n"
#define ff first
#define ss second
#define pi pair<ll, ll>
#define PI 3.141592653589793238462643383279502884L
#define mp make_pair
#define pb push_back
#define fall(i, a, b) for (int i = a; i < b; i++)
#define sz(x) (ll) x.size()
#define all(x) x.begin(), x.end()
#define ed cout << "ed";
ll MOD = 1e9 + 7;
ll MOD1 = 1e9 + 123;
ll MOD2 = 1e9 + 321;
// ll mod(ll a, ll m)
// {
//     if (a == 0)
//         return 0;
//     else
//         return (a % m + m) % m;
// }
// int mod(string num, int a)
// {

//     int res = 0;

//     for (int i = 0; i < num.length(); i++)
//         res = (res * 10 + (int)num[i] - '0') % a;

//     return res;
// }

// ll d, x, y;
// void extendedEuclid(int A, int B)
// {
//     if (B == 0)
//     {
//         d = A;
//         x = 1;
//         y = 0;
//     }
//     else
//     {
//         extendedEuclid(B, A % B);
//         int temp = x;
//         x = y;
//         y = temp - (A / B) * y;
//     }
// }

// ll modInverse(int A, int M)
// {
//     extendedEuclid(A, M);
//     return (x % M + M) % M;
// }

// // Generate random base in (before, after) open interval:
// int gen_base(const int before, const int after)
// {
//     auto seed = std::chrono::high_resolution_clock::now().time_since_epoch().count();
//     std::mt19937 mt_rand(seed);
//     int base = std::uniform_int_distribution<int>(before + 1, after)(mt_rand);
//     return base % 2 == 0 ? base - 1 : base;
// }

ll poow(ll a, ll b, ll m)
{
    if (b == 0)
        return 1;
    else if (b % 2 == 0)
        return ((ll)poow((a % m) * (a % m), b / 2, m) % m);
    else
        return ((a % m) * ((ll)poow((a % m) * (a % m), b / 2, m) % m)) % m;
}
// vector<int> rabin_karp(string const &t, string const &s) //string ,pattern
// {
//     const ll p1 = gen_base(3597, MOD1);
//     const ll p2 = gen_base(3597, MOD2);
//     const ll m1 = MOD1;
//     const ll m2 = MOD2;
//     ll S = s.size(), T = t.size();
//     vector<long long> p_pow1(max(S, T)), p_pow2(max(S, T));
//     p_pow1[0] = 1;
//     p_pow2[0] = 1;
//     for (int i = 1; i < (int)p_pow1.size(); i++)
//     {
//         p_pow1[i] = (p_pow1[i - 1] * p1) % m1;
//         p_pow2[i] = (p_pow2[i - 1] * p2) % m2;
//     }

//     vector<long long> h1(T + 1, 0), h2(T + 1, 0);
//     for (int i = 0; i < T; i++)
//     {
//         h1[i + 1] = (h1[i] + (t[i]) * p_pow1[i]) % m1;
//         h2[i + 1] = (h2[i] + (t[i]) * p_pow2[i]) % m2;
//     }
//     long long h_s1 = 0, h_s2 = 0;
//     for (int i = 0; i < S; i++)
//     {
//         h_s1 = (h_s1 + (s[i]) * p_pow1[i]) % m1;
//         h_s2 = (h_s2 + (s[i]) * p_pow2[i]) % m2;
//     }

//     vector<int> occurences;
//     for (int i = 0; i + S - 1 < T; i++)
//     {
//         long long cur_h1 = (h1[i + S] + m1 - h1[i]) % m1;
//         long long cur_h2 = (h2[i + S] + m2 - h2[i]) % m2;
//         if (cur_h1 == h_s1 * p_pow1[i] % m1 && cur_h2 == h_s2 * p_pow2[i] % m2)
//             occurences.push_back(i);
//     }
//     return occurences;
// }
// vector<int> Q;
// vector<int> G[1000000];
// vector<int> L(1000000, 0);
// vector<int> vis(1000000, 0);
// void dfs(ll y)
// {
//     vis[y] = 1;
//     Q.pb(y);
//     for (auto h : G[y])
//     {
//         if (vis[h] == 0)
//             dfs(h);
//     }
// }
// bool is_bipartite(ll y, ll d)
// {
//     vis[y] = true;
//     L[y] = d;
//     for (auto h : G[y])

//         if (vis[h] == false)
//             return is_bipartite(h, 1 ^ d);
//         else if (L[h] == d)
//             return false;
//     return true;
// }
bool compa(string a, string b)
{
    if (a.length() <= b.length())
        return true;
    else
        return false;
}

int main()
{
    fio;
    ll t, a, n, q, k, i, m, c, u, f, j, p, r, x, y, s, b, d;

    // Sieve
    //   p= 1000000;
    // bool a[p];

    //       for (i = 2; i <= p; i += 1)
    //          a[i] = true;
    //       a[0] = false;
    //       a[1] = false;

    //       for (i = 2; i * i <= p; i += 1)
    //       {
    //          if (a[i] == true)
    //             for (j = i * i; j <= p; j += i)
    //                a[j] = false;
    //       }

    cin >> a >> b;

    if (b % 2 != 0)
        cout << "No";
    else if (!(2 * a <= b && b <= 4 * a))
        cout << "No";
    else
        cout << "Yes";

    return 0;
}


Measured memory_bytes: 3648