using System;
using System.IO;

namespace contest
{
    class Program
    {
        static void Main(string[] args)
        {
            //Console.SetIn(new StreamReader("input.txt"));
            solve_abc135a();
        }

        public static void solve_abc135a()
        {
            string[] ab = Console.ReadLine().Split(' ');

            int a = Convert.ToInt32(ab[0]);
            int b = Convert.ToInt32(ab[1]);

            int res = Math.Abs(a - b);

            if (res % 2 == 0)
            {
                Console.WriteLine(Math.Max(a, b) - res / 2);
            }
            else
            {
                Console.WriteLine("IMPOSSIBLE");
            }

        }

        public static void solve_agc35a()
        {
            int n = Convert.ToInt32(Console.ReadLine());

            string[] test = Console.ReadLine().Split(' ');

            int[] hats = Array.ConvertAll(test, int.Parse);

            Array.Sort(hats);
            string answer = "Yes";
            for (int i = 0; i < hats.Length; i++)
            {
                int prev = 0;
                int next = 0;
                if (i == 0)
                {
                    prev = hats[n - 1];
                    next = hats[i + 1];
                }
                else if (i == n - 1)
                {
                    prev = hats[i - 1];
                    next = hats[0];
                }
                else
                {
                    prev = hats[i - 1];
                    next = hats[i + 1];
                }
                if (hats[i] != (prev ^ next))
                {
                    answer = "No";
                    break;
                }
            }

            Console.WriteLine(answer);
        }

        //Скорее всего можно решить за константу.
        public static void solve_abc125_a()
        {
            string[] abt = Console.ReadLine().Split(' ');
            int a = Convert.ToInt32(abt[0]);
            int b = Convert.ToInt32(abt[1]);
            int c = Convert.ToInt32(abt[2]);

            int count = 0;
            int i = 1;
            while (i * a <= c)
            {
                count += b;
                i++;
            }

            Console.WriteLine(count);
        }

        /*
        Перый подход найти два числа такие, чтобы разность
        суммы ценностей и суммы цен была максимальной неверен. 
        Невнимательно прочитал задание. Там сказано, что можно взять
        несколько или не брать вообще. Может быть не ровно два.
        Решение:
        нужно мксимизировтаь разность ценности и цены элементов.  
        */
        public static void solve_abc125_b()
        {
            int n = Convert.ToInt32(Console.ReadLine());
            string[] values = Console.ReadLine().Split(' ');
            string[] costs  = Console.ReadLine().Split(' ');

            int max = 0;
            for (int i = 0; i < values.Length; i++)
            {
                max = Math.Max(max, max + Convert.ToInt32(values[i]) - Convert.ToInt32(costs[i]));
            }

            Console.WriteLine(max);
        }

        /*
        Первая идея найти два маскимума или маскимум и мимнимум
        и среди них искать gcd не работает. Среди остальных чисел может быть
        несколько простых чисел, которые не подойдут.
         */
        public static void solve_abc125_c()
        {
            int n = Convert.ToInt32(Console.ReadLine());
            string[] str = Console.ReadLine().Split(' ');
            int[] nums = Array.ConvertAll(str, int.Parse);

            int max = nums[0];
            for (int i = 1; i < nums.Length; i++)
            {
                int temp = gcd(max, nums[i]);
                if (max < temp)
                {
                    max = temp;
                }
                /*else if (chageElement)
                {
                    max = 
                }*/
            }

            Console.WriteLine(max);
        }

        public static int gcd(int a, int b)
        {
            if (b == 0)
            {
                return a;
            }
            return gcd(b, a % b);
        }

        public static void generate()
        {
    //         	public static void main(String[] args) {
	// 	int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	// 	int mask = 0;
	// 	int limit = 1 << array.length;
	// 	while (mask < limit) {
	// 		printPermutation(mask, array);
	// 		mask++;
	// 	}
	// }
 
	// private static void printPermutation(int mask, int[] array) {
	// 	System.out.print("(");
	// 	for (int i = 0; i < array.length; i++) {
	// 		//исли бит номер i еденичный, печатаем i-й элемент массива
	// 		if ((mask & (1 << i)) != 0) {
	// 			System.out.print(array[i] + ",");
	// 		}
	// 	}
	// 	System.out.println(")");
	// }
        }
    }
}


Measured memory_bytes: 11220