/**
 *  Author:    AEZAKMII
 *  Created:   24.09.2020 19:09:40	
 *	
**/

#include <bits/stdc++.h>

using namespace std;
string to_string(string s) {
    return '"' + s + '"';
}
string to_string(const char* s) {
    return to_string((string) s);
}
string to_string(bool b) {
    return (b ? "true" : "false");
}
string to_string(char ch) {
    return string("'")+ch+string("'");
}
template <typename A, typename B>
string to_string(pair<A, B> p) {
    return "(" + to_string(p.first) + ", " + to_string(p.second) + ")";
}
template <class InputIterator>
string to_string (InputIterator first, InputIterator last) {
    bool start = true;
    string res = "{";
    while (first!=last) {
        if (!start) {
            res += ", ";
        }
        start = false;
        res += to_string(*first);
        ++first;
    }
    res += "}";
    return res;
}
template <typename A>
string to_string(A v) {
    bool first = true;
    string res = "{";
    for (const auto &x : v) {
        if (!first) {
            res += ", ";
        }
        first = false;
        res += to_string(x);
    }
    res += "}";
    return res;
}
template<typename A,size_t N>
string to_string(A(&v)[N]){
    bool first = true;
    string res = "{";
    for (int i=0;i<N;i++) {
        if (!first) {
            res += ", ";
        }
        first = false;
        res += to_string(v[i]);
    }
    res += "}";
    return res;
}
template<size_t N>
string to_string(const bitset<N>& v)
{
    string res="";
    for (int i = 0; i < (int)v.size(); ++i) {
        res+= char('0'+v[i]);
    }
    return res;
}
string to_string(const vector<bool>& v)
{
    string res="";
    for (int i = 0; i < (int)v.size(); ++i) {
        res+= char('0'+v[i]);
    }
    return res;
}
void debug_out() {
    cerr << endl;
}
template <typename Head, typename... Tail>
void debug_out(Head&& H, Tail&&... T) {
    cerr << " " << to_string(forward<Head>(H));
    debug_out(forward<Tail>(T)...);
}

#ifdef LOCAL
#define debug(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__)
#else
#define debug(...)
#endif

#define all(v) v.begin(),v.end()
#define rall(v) v.rbegin(),v.rend()
#define sz(v) (int)(v.size())
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define ar array
#define forn(i, n) for(int i = 0; i < n ; ++i)
#define for1(i, n) for(int i = 1; i <=n ; ++i)
#define ford(i, n) for(int i = n-1; i >= 0; --i)

typedef long long ll;
typedef double db;
typedef vector<int> vi;
typedef pair<int,int> pii;
typedef vector<pair<int,int>> vpi ;

const db PI = acos(-1);
const ll mod = 1e9+7;
template<class T> bool smin(T &a, T b) { return a > b ? (a = b, true) : false; }
template<class T> bool smax(T &a, T b) { return a < b ? (a = b, true) : false; }
template<typename T1, typename T2> T1 powz(T1 A, T2 B);

const int MXN=1e6+5;
const ll INF = 9e18+200;
const int inf = 1e9+100;
const int mxn = 2e5+20;


void test_case() {	
    int x, y; cin >> x>>y;
    forn(i, x){
    	if(i*2 +(x-i)*4 == y || i*4 + (x-i)*2 == y){
    		cout<<"Yes";
    		return;
    	}
    }
    cout<<"No";						     
}
signed main(){
   ios_base::sync_with_stdio(false);cin.tie(nullptr);
   int Tests = 1;//cin >> Tests;    
   for(int tc = 1; tc <= Tests; ++tc){
      //cout<<"Case #"<<tc<<": ";
       test_case();
        cout<<'\n';
   }
#ifdef CG_DEFINE
    cerr << "Time elapsed: "<< 1.0*clock() / CLOCKS_PER_SEC <<"s.\n";
#endif   
}
template<typename T1, typename T2>
T1 powz(T1 X,T2 B)
{
    ll A = X;
    ll res=1;
        A%=mod; 
        assert(B>=0); 
    for( ; B ; B>>=1){
        if(B&1)res=res*A%mod;
        A= A*A%mod;
    }
    return res;
}






Measured memory_bytes: 3664