description: <image>
  
  William has two numbers a and b initially both equal to zero. William mastered performing three different operations with them quickly. Before performing each operation some positive integer k is picked, which is then used to perform one of the following operations: (note, that for each operation you can choose a new positive integer k)
  
    1. add number k to both a and b, or 
    2. add number k to a and subtract k from b, or 
    3. add number k to b and subtract k from a. 
  
  
  
  Note that after performing operations, numbers a and b may become negative as well.
  
  William wants to find out the minimal number of operations he would have to perform to make a equal to his favorite number c and b equal to his second favorite number d.
  
  Input
  
  Each test contains multiple test cases. The first line contains the number of test cases t (1 ≤ t ≤ 10^4). Description of the test cases follows.
  
  The only line of each test case contains two integers c and d (0 ≤ c, d ≤ 10^9), which are William's favorite numbers and which he wants a and b to be transformed into.
  
  Output
  
  For each test case output a single number, which is the minimal number of operations which William would have to perform to make a equal to c and b equal to d, or -1 if it is impossible to achieve this using the described operations.
  
  Example
  
  Input
  
  
  6
  1 2
  3 5
  5 3
  6 6
  8 0
  0 0
  
  
  Output
  
  
  -1
  2
  2
  1
  2
  0
  
  Note
  
  Let us demonstrate one of the suboptimal ways of getting a pair (3, 5):
  
    * Using an operation of the first type with k=1, the current pair would be equal to (1, 1). 
    * Using an operation of the third type with k=8, the current pair would be equal to (-7, 9). 
    * Using an operation of the second type with k=7, the current pair would be equal to (0, 2). 
    * Using an operation of the first type with k=3, the current pair would be equal to (3, 5). 
solution: import java.io.*;import java.lang.*;import java.util.*;
  //* --> number of prime numbers less then or equal to x are  -->  x/ln(x)
  //* --> String concatenation using the + operator within a loop should be avoided. Since the String object is immutable, each call for concatenation will
  // result in a new String object being created.
  // THE SIEVE USED HERE WILL RETURN A LIST CONTAINING ALL THE PRIME NUMBERS TILL N
   public class c{static FastScanner sc;static PrintWriter pw;static class FastScanner {InputStreamReader is;BufferedReader br;StringTokenizer st;
  public FastScanner() {is = new InputStreamReader(System.in);br = new BufferedReader(is);}
  String next() throws Exception {while (st == null || !st.hasMoreElements())st = new StringTokenizer(br.readLine());
  return st.nextToken();}int nextInt() throws Exception {return Integer.parseInt(next());}long nextLong() throws Exception {
  return Long.parseLong(next());}int[] readArray(int num) throws Exception {int arr[]=new int[num];
  for(int i=0;i<num;i++)arr[i]=nextInt();return arr;}String nextLine() throws Exception {return br.readLine();
  }} public static boolean power_of_two(int a){if((a&(a-1))==0){ return true;}return false;}
  static boolean PS(double x){if (x >= 0) {double i= Math.sqrt(x);if(i%1!=0){
  return false;}return ((i * i) == x);}return false;}public static int[] ia(int n){int ar[]=new int[n];
  return ar;}public static long[] la(int n){long ar[]=new long[n];return ar;}
  public static void print(int ans,int t){System.out.println("Case"+" "+"#"+t+":"+" "+ans);}
  static long mod=1000000007;static int max=Integer.MIN_VALUE;static int min=Integer.MAX_VALUE;
  public static void sort(long[] arr){//because Arrays.sort() uses quicksort which is dumb
  //Collections.sort() uses merge sort
  ArrayList<Long> ls = new ArrayList<Long>();for(long x: arr)ls.add(x);Collections.sort(ls);
  for(int i=0; i < arr.length; i++)arr[i] = ls.get(i);}public static long fciel(long a, long b) {if (a == 0)  return 0;return (a - 1) / b + 1;}
   static boolean[] is_prime = new boolean[1000001];static ArrayList<Integer> list = new ArrayList<>();
  static long n = 1000000;public static void sieve() {Arrays.fill(is_prime, true);
  is_prime[0] = is_prime[1] = false;for (int i = 2; i * i <= n; i++) {
  if (is_prime[i]) {for (int j = i * i; j <= n; j += i)is_prime[j] = false;}}for (int i = 2; i <= n; i++) {
  if (is_prime[i]) {list.add(i);}}}
  public static void main(String args[]) throws java.lang.Exception {
  sc = new FastScanner();pw = new PrintWriter(System.out);StringBuilder s = new StringBuilder();
  int t=sc.nextInt();
  while(t-->0)
  {
      long a=sc.nextLong();
      long b=sc.nextLong();
      if(Math.abs(a-b)%2!=0)
      {
          s.append(-1);
      }
      else{
          s.append((a==b)&&(a!=0)?1:((a==0&&b==0)?0:2));
      }
          if(t>0)
          {
              s.append("\n");
          }
      }
  pw.print(s);pw.close();}}