import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Scanner;
 
// Solution
public class Main {
  private static Scanner in;
  private static PrintWriter out;
  private static final String INPUT = ""; // input file name
 
  /**
   * Interactive get next command
   */
  static int get(int pos) {
    out.println(pos + 1);
    out.flush();
    return ni();
  }
 
  static void solve() {
    int x = ni();
    int y = ni();
    
    int f = (y / 2) - x;
    int t = x - f ;
    
    if (y % 2 != 0 || f < 0 || t < 0) {
      out.println("No");
    } else {
    	out.println("Yes");
    }
  }
 
  public static void main(String[] args) throws Exception {
    long S = System.currentTimeMillis();
    in = INPUT.isEmpty() ? new Scanner(System.in) : new Scanner(INPUT);
    out = new PrintWriter(System.out);
 
    solve();
    out.flush();
    long G = System.currentTimeMillis();
    tr(G - S + "ms");
  }
 
  private static int ni() {
    return Integer.parseInt(in.next());
  }
 
  private static long nl() {
    return Long.parseLong(in.next());
  }
 
  // Math Utils
  private static int pi(int num, int pow) {
    int result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        result *= num;
      }
 
      num *= num;
      pow /= 2;
    }
 
    return result;
  }
 
  private static int pim(int num, int pow, int mod) {
    int result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        // keep collecting `odd` num in result
        result = (result * num) % mod;
      }
 
      num = (num * num) % mod;
      pow /= 2;
    }
 
    return result;
  }
 
  private static long pl(long num, long pow) {
    long result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        result *= num;
      }
 
      num *= num;
      pow /= 2;
    }
 
    return result;
  }
 
  private static long plm(long num, long pow, long mod) {
    long result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        // keep collecting `odd` num in result
        result = (result * num) % mod;
      }
 
      num = (num * num) % mod;
      pow /= 2;
    }
 
    return result;
  }
 
  static void tr(Object... o) {
    if (!INPUT.isEmpty())
      out.println(Arrays.deepToString(o));
  }
} import java.io.PrintWriter; PrintWriter java.io import java.util.Arrays; Arrays java.util import java.util.Scanner; Scanner java.util public class Main {
  private static Scanner in;
  private static PrintWriter out;
  private static final String INPUT = ""; // input file name
 
  /**
   * Interactive get next command
   */
  static int get(int pos) {
    out.println(pos + 1);
    out.flush();
    return ni();
  }
 
  static void solve() {
    int x = ni();
    int y = ni();
    
    int f = (y / 2) - x;
    int t = x - f ;
    
    if (y % 2 != 0 || f < 0 || t < 0) {
      out.println("No");
    } else {
    	out.println("Yes");
    }
  }
 
  public static void main(String[] args) throws Exception {
    long S = System.currentTimeMillis();
    in = INPUT.isEmpty() ? new Scanner(System.in) : new Scanner(INPUT);
    out = new PrintWriter(System.out);
 
    solve();
    out.flush();
    long G = System.currentTimeMillis();
    tr(G - S + "ms");
  }
 
  private static int ni() {
    return Integer.parseInt(in.next());
  }
 
  private static long nl() {
    return Long.parseLong(in.next());
  }
 
  // Math Utils
  private static int pi(int num, int pow) {
    int result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        result *= num;
      }
 
      num *= num;
      pow /= 2;
    }
 
    return result;
  }
 
  private static int pim(int num, int pow, int mod) {
    int result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        // keep collecting `odd` num in result
        result = (result * num) % mod;
      }
 
      num = (num * num) % mod;
      pow /= 2;
    }
 
    return result;
  }
 
  private static long pl(long num, long pow) {
    long result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        result *= num;
      }
 
      num *= num;
      pow /= 2;
    }
 
    return result;
  }
 
  private static long plm(long num, long pow, long mod) {
    long result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        // keep collecting `odd` num in result
        result = (result * num) % mod;
      }
 
      num = (num * num) % mod;
      pow /= 2;
    }
 
    return result;
  }
 
  static void tr(Object... o) {
    if (!INPUT.isEmpty())
      out.println(Arrays.deepToString(o));
  }
} Main private static Scanner in; in private static PrintWriter out; out private static final String INPUT = ""; // input file name INPUT "" /**
   * Interactive get next command
   */
  static int get(int pos) {
    out.println(pos + 1);
    out.flush();
    return ni();
  } get {
    out.println(pos + 1);
    out.flush();
    return ni();
  } out.println(pos + 1) out.println out pos + 1 pos 1 out.flush() out.flush out return ni(); ni() ni int pos pos static void solve() {
    int x = ni();
    int y = ni();
    
    int f = (y / 2) - x;
    int t = x - f ;
    
    if (y % 2 != 0 || f < 0 || t < 0) {
      out.println("No");
    } else {
    	out.println("Yes");
    }
  } solve {
    int x = ni();
    int y = ni();
    
    int f = (y / 2) - x;
    int t = x - f ;
    
    if (y % 2 != 0 || f < 0 || t < 0) {
      out.println("No");
    } else {
    	out.println("Yes");
    }
  } int x = ni(); x ni() ni int y = ni(); y ni() ni int f = (y / 2) - x; f (y / 2) - x (y / 2) y 2 x int t = x - f ; t x - f x f if (y % 2 != 0 || f < 0 || t < 0) {
      out.println("No");
    } else {
    	out.println("Yes");
    } y % 2 != 0 || f < 0 || t < 0 y % 2 != 0 || f < 0 || t < 0 y % 2 != 0 y % 2 y 2 0 f < 0 f 0 t < 0 t 0 {
      out.println("No");
    } out.println("No") out.println out "No" {
    	out.println("Yes");
    } out.println("Yes") out.println out "Yes" public static void main(String[] args) throws Exception {
    long S = System.currentTimeMillis();
    in = INPUT.isEmpty() ? new Scanner(System.in) : new Scanner(INPUT);
    out = new PrintWriter(System.out);
 
    solve();
    out.flush();
    long G = System.currentTimeMillis();
    tr(G - S + "ms");
  } main {
    long S = System.currentTimeMillis();
    in = INPUT.isEmpty() ? new Scanner(System.in) : new Scanner(INPUT);
    out = new PrintWriter(System.out);
 
    solve();
    out.flush();
    long G = System.currentTimeMillis();
    tr(G - S + "ms");
  } long S = System.currentTimeMillis(); S System.currentTimeMillis() System.currentTimeMillis System in = INPUT.isEmpty() ? new Scanner(System.in) : new Scanner(INPUT) in INPUT.isEmpty() ? new Scanner(System.in) : new Scanner(INPUT) INPUT.isEmpty() INPUT.isEmpty INPUT new Scanner(System.in) new Scanner(INPUT) out = new PrintWriter(System.out) out new PrintWriter(System.out) solve() solve out.flush() out.flush out long G = System.currentTimeMillis(); G System.currentTimeMillis() System.currentTimeMillis System tr(G - S + "ms") tr G - S + "ms" G - S G S "ms" String[] args args private static int ni() {
    return Integer.parseInt(in.next());
  } ni {
    return Integer.parseInt(in.next());
  } return Integer.parseInt(in.next()); Integer.parseInt(in.next()) Integer.parseInt Integer in.next() in.next in private static long nl() {
    return Long.parseLong(in.next());
  } nl {
    return Long.parseLong(in.next());
  } return Long.parseLong(in.next()); Long.parseLong(in.next()) Long.parseLong Long in.next() in.next in // Math Utils
  private static int pi(int num, int pow) {
    int result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        result *= num;
      }
 
      num *= num;
      pow /= 2;
    }
 
    return result;
  } pi {
    int result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        result *= num;
      }
 
      num *= num;
      pow /= 2;
    }
 
    return result;
  } int result = 1; result 1 while (pow > 0) {
      if (pow % 2 == 1) {
        result *= num;
      }
 
      num *= num;
      pow /= 2;
    } pow > 0 pow 0 {
      if (pow % 2 == 1) {
        result *= num;
      }
 
      num *= num;
      pow /= 2;
    } if (pow % 2 == 1) {
        result *= num;
      } pow % 2 == 1 pow % 2 pow 2 1 {
        result *= num;
      } result *= num result num num *= num num num pow /= 2 pow 2 return result; result int num num int pow pow private static int pim(int num, int pow, int mod) {
    int result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        // keep collecting `odd` num in result
        result = (result * num) % mod;
      }
 
      num = (num * num) % mod;
      pow /= 2;
    }
 
    return result;
  } pim {
    int result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        // keep collecting `odd` num in result
        result = (result * num) % mod;
      }
 
      num = (num * num) % mod;
      pow /= 2;
    }
 
    return result;
  } int result = 1; result 1 while (pow > 0) {
      if (pow % 2 == 1) {
        // keep collecting `odd` num in result
        result = (result * num) % mod;
      }
 
      num = (num * num) % mod;
      pow /= 2;
    } pow > 0 pow 0 {
      if (pow % 2 == 1) {
        // keep collecting `odd` num in result
        result = (result * num) % mod;
      }
 
      num = (num * num) % mod;
      pow /= 2;
    } if (pow % 2 == 1) {
        // keep collecting `odd` num in result
        result = (result * num) % mod;
      } pow % 2 == 1 pow % 2 pow 2 1 {
        // keep collecting `odd` num in result
        result = (result * num) % mod;
      } result = (result * num) % mod result (result * num) % mod (result * num) result num mod num = (num * num) % mod num (num * num) % mod (num * num) num num mod pow /= 2 pow 2 return result; result int num num int pow pow int mod mod private static long pl(long num, long pow) {
    long result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        result *= num;
      }
 
      num *= num;
      pow /= 2;
    }
 
    return result;
  } pl {
    long result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        result *= num;
      }
 
      num *= num;
      pow /= 2;
    }
 
    return result;
  } long result = 1; result 1 while (pow > 0) {
      if (pow % 2 == 1) {
        result *= num;
      }
 
      num *= num;
      pow /= 2;
    } pow > 0 pow 0 {
      if (pow % 2 == 1) {
        result *= num;
      }
 
      num *= num;
      pow /= 2;
    } if (pow % 2 == 1) {
        result *= num;
      } pow % 2 == 1 pow % 2 pow 2 1 {
        result *= num;
      } result *= num result num num *= num num num pow /= 2 pow 2 return result; result long num num long pow pow private static long plm(long num, long pow, long mod) {
    long result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        // keep collecting `odd` num in result
        result = (result * num) % mod;
      }
 
      num = (num * num) % mod;
      pow /= 2;
    }
 
    return result;
  } plm {
    long result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        // keep collecting `odd` num in result
        result = (result * num) % mod;
      }
 
      num = (num * num) % mod;
      pow /= 2;
    }
 
    return result;
  } long result = 1; result 1 while (pow > 0) {
      if (pow % 2 == 1) {
        // keep collecting `odd` num in result
        result = (result * num) % mod;
      }
 
      num = (num * num) % mod;
      pow /= 2;
    } pow > 0 pow 0 {
      if (pow % 2 == 1) {
        // keep collecting `odd` num in result
        result = (result * num) % mod;
      }
 
      num = (num * num) % mod;
      pow /= 2;
    } if (pow % 2 == 1) {
        // keep collecting `odd` num in result
        result = (result * num) % mod;
      } pow % 2 == 1 pow % 2 pow 2 1 {
        // keep collecting `odd` num in result
        result = (result * num) % mod;
      } result = (result * num) % mod result (result * num) % mod (result * num) result num mod num = (num * num) % mod num (num * num) % mod (num * num) num num mod pow /= 2 pow 2 return result; result long num num long pow pow long mod mod static void tr(Object... o) {
    if (!INPUT.isEmpty())
      out.println(Arrays.deepToString(o));
  } tr {
    if (!INPUT.isEmpty())
      out.println(Arrays.deepToString(o));
  } if (!INPUT.isEmpty())
      out.println(Arrays.deepToString(o)); !INPUT.isEmpty() INPUT.isEmpty() INPUT.isEmpty INPUT out.println(Arrays.deepToString(o)) out.println out Arrays.deepToString(o) Arrays.deepToString Arrays o Object... o o public class Main {
  private static Scanner in;
  private static PrintWriter out;
  private static final String INPUT = ""; // input file name
 
  /**
   * Interactive get next command
   */
  static int get(int pos) {
    out.println(pos + 1);
    out.flush();
    return ni();
  }
 
  static void solve() {
    int x = ni();
    int y = ni();
    
    int f = (y / 2) - x;
    int t = x - f ;
    
    if (y % 2 != 0 || f < 0 || t < 0) {
      out.println("No");
    } else {
    	out.println("Yes");
    }
  }
 
  public static void main(String[] args) throws Exception {
    long S = System.currentTimeMillis();
    in = INPUT.isEmpty() ? new Scanner(System.in) : new Scanner(INPUT);
    out = new PrintWriter(System.out);
 
    solve();
    out.flush();
    long G = System.currentTimeMillis();
    tr(G - S + "ms");
  }
 
  private static int ni() {
    return Integer.parseInt(in.next());
  }
 
  private static long nl() {
    return Long.parseLong(in.next());
  }
 
  // Math Utils
  private static int pi(int num, int pow) {
    int result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        result *= num;
      }
 
      num *= num;
      pow /= 2;
    }
 
    return result;
  }
 
  private static int pim(int num, int pow, int mod) {
    int result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        // keep collecting `odd` num in result
        result = (result * num) % mod;
      }
 
      num = (num * num) % mod;
      pow /= 2;
    }
 
    return result;
  }
 
  private static long pl(long num, long pow) {
    long result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        result *= num;
      }
 
      num *= num;
      pow /= 2;
    }
 
    return result;
  }
 
  private static long plm(long num, long pow, long mod) {
    long result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        // keep collecting `odd` num in result
        result = (result * num) % mod;
      }
 
      num = (num * num) % mod;
      pow /= 2;
    }
 
    return result;
  }
 
  static void tr(Object... o) {
    if (!INPUT.isEmpty())
      out.println(Arrays.deepToString(o));
  }
} public class Main {
  private static Scanner in;
  private static PrintWriter out;
  private static final String INPUT = ""; // input file name
 
  /**
   * Interactive get next command
   */
  static int get(int pos) {
    out.println(pos + 1);
    out.flush();
    return ni();
  }
 
  static void solve() {
    int x = ni();
    int y = ni();
    
    int f = (y / 2) - x;
    int t = x - f ;
    
    if (y % 2 != 0 || f < 0 || t < 0) {
      out.println("No");
    } else {
    	out.println("Yes");
    }
  }
 
  public static void main(String[] args) throws Exception {
    long S = System.currentTimeMillis();
    in = INPUT.isEmpty() ? new Scanner(System.in) : new Scanner(INPUT);
    out = new PrintWriter(System.out);
 
    solve();
    out.flush();
    long G = System.currentTimeMillis();
    tr(G - S + "ms");
  }
 
  private static int ni() {
    return Integer.parseInt(in.next());
  }
 
  private static long nl() {
    return Long.parseLong(in.next());
  }
 
  // Math Utils
  private static int pi(int num, int pow) {
    int result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        result *= num;
      }
 
      num *= num;
      pow /= 2;
    }
 
    return result;
  }
 
  private static int pim(int num, int pow, int mod) {
    int result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        // keep collecting `odd` num in result
        result = (result * num) % mod;
      }
 
      num = (num * num) % mod;
      pow /= 2;
    }
 
    return result;
  }
 
  private static long pl(long num, long pow) {
    long result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        result *= num;
      }
 
      num *= num;
      pow /= 2;
    }
 
    return result;
  }
 
  private static long plm(long num, long pow, long mod) {
    long result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        // keep collecting `odd` num in result
        result = (result * num) % mod;
      }
 
      num = (num * num) % mod;
      pow /= 2;
    }
 
    return result;
  }
 
  static void tr(Object... o) {
    if (!INPUT.isEmpty())
      out.println(Arrays.deepToString(o));
  }
} Main
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Scanner;
 
// Solution
public class Main {
  private static Scanner in;
  private static PrintWriter out;
  private static final String INPUT = ""; // input file name
 
  /**
   * Interactive get next command
   */
  static int get(int pos) {
    out.println(pos + 1);
    out.flush();
    return ni();
  }
 
  static void solve() {
    int x = ni();
    int y = ni();
    
    int f = (y / 2) - x;
    int t = x - f ;
    
    if (y % 2 != 0 || f < 0 || t < 0) {
      out.println("No");
    } else {
    	out.println("Yes");
    }
  }
 
  public static void main(String[] args) throws Exception {
    long S = System.currentTimeMillis();
    in = INPUT.isEmpty() ? new Scanner(System.in) : new Scanner(INPUT);
    out = new PrintWriter(System.out);
 
    solve();
    out.flush();
    long G = System.currentTimeMillis();
    tr(G - S + "ms");
  }
 
  private static int ni() {
    return Integer.parseInt(in.next());
  }
 
  private static long nl() {
    return Long.parseLong(in.next());
  }
 
  // Math Utils
  private static int pi(int num, int pow) {
    int result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        result *= num;
      }
 
      num *= num;
      pow /= 2;
    }
 
    return result;
  }
 
  private static int pim(int num, int pow, int mod) {
    int result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        // keep collecting `odd` num in result
        result = (result * num) % mod;
      }
 
      num = (num * num) % mod;
      pow /= 2;
    }
 
    return result;
  }
 
  private static long pl(long num, long pow) {
    long result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        result *= num;
      }
 
      num *= num;
      pow /= 2;
    }
 
    return result;
  }
 
  private static long plm(long num, long pow, long mod) {
    long result = 1;
 
    while (pow > 0) {
      if (pow % 2 == 1) {
        // keep collecting `odd` num in result
        result = (result * num) % mod;
      }
 
      num = (num * num) % mod;
      pow /= 2;
    }
 
    return result;
  }
 
  static void tr(Object... o) {
    if (!INPUT.isEmpty())
      out.println(Arrays.deepToString(o));
  }
}