
// Java program For handling Input/Output 
import java.io.*; 
import java.util.*;
import java.math.*;


public class Main 
{ 
    Scanner sc;

//actual logic
void solve(){
    int a = ni();
    int b = ni();

    if((a+b) % 2 == 0)
    System.out.println((a + b) / 2);
    else
        System.out.println("IMPOSSIBLE");

}


//constructor
    Main(){
        try{  
            sc = new Scanner(System.in);
        }catch(Exception e){
            System.out.println(e);
        }
    }


//main metohd
    public static void main(String[] args) 
    { 
    	new Main().solve();
    }


//Utility methods
    //input an integer from scanner
    int ni()
    {
        int a = sc.nextInt();
        return a;
    }
    //input a long from scanner
    long nl()
    {
        return sc.nextLong();
    }
    //input a float from scanner
    float nf(){
        float a = sc.nextFloat();
        return a;
    }
    //input a double from scanner
    double nd(){
        double a = sc.nextDouble();
        return a;
    }
    //input a sentence from scanner
    String ns(){
        return sc.nextLine();
    }
    //converts a string to stringtokenizer
    StringTokenizer nst(String s){
        return new StringTokenizer(s);
    }
    //input an intger array
    void ia(int a[]){
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextInt();
    }
    //
    void la(long a[]){
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextLong();
    }
    //input a float array
    void fa(float a[]){
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextFloat();
    }
    //input a double array
    void da(double a[]){
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextDouble();
    }
    //input a string array either with all empty input or from scanner
    void sa(String a[], boolean empty){
        if(empty)
        {
            for(int i = 0;i < a.length;i++)
            {
                a[i] = "";
            }
        }
        else
        {
            for(int i = 0;i < a.length;i++)
            {
                a[i] = ns();
            }
        }
    }
    //input two dimensional integer array
    void ida(int a[][], int n, int m)
    {
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = ni();
            }
        }
    }
    //input two dimentional long array
    void lda(long a[][], int n, int m)
    {
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = nl();
            }
        }
    }
    //input two dimensional double array
    void dda(double a[][], int n, int m)
    {
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = nd();
            }
        }
    }
    //convert string to integer
    int stoi(String s){
        return Integer.parseInt(s);
    }
    //convert string to double
    double stod(String s){
        return Double.parseDouble(s);
    }
    //find minimum in a long array
    long lmin(long a[])
    {
        long min = Long.MAX_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(min > a[i])
                min = a[i];
        }
        return min;
    }
    //find minimum in a integer array
    int imin(int a[])
    {
        int min = Integer.MAX_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(min > a[i])
                min = a[i];
        }
        return min;
    }
    //find maximum in a long array
    long lmax(long a[])
    {
        long max = Long.MIN_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(max < a[i])
                max = a[i];
        }
        return max;
    }
    //find maximum in an integer array
    int imax(int a[])
    {
        int max = Integer.MIN_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(max < a[i])
                max = a[i];
        }
        return max;
    }
    //check whether an element is present in an integer array by binary search
    boolean ibs(int a[], int toFind)
    {
        Arrays.sort(a);
        int min = 0;
        int max = a.length-1;
        boolean found = false;

        while(min <= max && !found)
        {
            int mid = min + (max-min)/2;
            if(a[mid] == toFind)
            {
               found = true;
            }
            else if(toFind > a[mid])
            {
                min = mid+1;
            }
            else
            {
                max = mid-1;
            }

        }
        return found;
    }
    //check whether an element is present in a long array
    boolean lbs(long a[], long toFind)
    {
        Arrays.sort(a);
        int min = 0;
        int max = a.length-1;
        boolean found = false;

        while(min <= max && !found)
        {
            int mid = min + (max-min)/2;
            if(a[mid] == toFind)
            {
               found = true;
            }
            else if(toFind > a[mid])
            {
                min = mid+1;
            }
            else
            {
                max = mid-1;
            }

        }
        return found;
    }

} import java.io.*; io.* java import java.util.*; util.* java import java.math.*; math.* java public class Main 
{ 
    Scanner sc;

//actual logic
void solve(){
    int a = ni();
    int b = ni();

    if((a+b) % 2 == 0)
    System.out.println((a + b) / 2);
    else
        System.out.println("IMPOSSIBLE");

}


//constructor
    Main(){
        try{  
            sc = new Scanner(System.in);
        }catch(Exception e){
            System.out.println(e);
        }
    }


//main metohd
    public static void main(String[] args) 
    { 
    	new Main().solve();
    }


//Utility methods
    //input an integer from scanner
    int ni()
    {
        int a = sc.nextInt();
        return a;
    }
    //input a long from scanner
    long nl()
    {
        return sc.nextLong();
    }
    //input a float from scanner
    float nf(){
        float a = sc.nextFloat();
        return a;
    }
    //input a double from scanner
    double nd(){
        double a = sc.nextDouble();
        return a;
    }
    //input a sentence from scanner
    String ns(){
        return sc.nextLine();
    }
    //converts a string to stringtokenizer
    StringTokenizer nst(String s){
        return new StringTokenizer(s);
    }
    //input an intger array
    void ia(int a[]){
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextInt();
    }
    //
    void la(long a[]){
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextLong();
    }
    //input a float array
    void fa(float a[]){
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextFloat();
    }
    //input a double array
    void da(double a[]){
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextDouble();
    }
    //input a string array either with all empty input or from scanner
    void sa(String a[], boolean empty){
        if(empty)
        {
            for(int i = 0;i < a.length;i++)
            {
                a[i] = "";
            }
        }
        else
        {
            for(int i = 0;i < a.length;i++)
            {
                a[i] = ns();
            }
        }
    }
    //input two dimensional integer array
    void ida(int a[][], int n, int m)
    {
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = ni();
            }
        }
    }
    //input two dimentional long array
    void lda(long a[][], int n, int m)
    {
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = nl();
            }
        }
    }
    //input two dimensional double array
    void dda(double a[][], int n, int m)
    {
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = nd();
            }
        }
    }
    //convert string to integer
    int stoi(String s){
        return Integer.parseInt(s);
    }
    //convert string to double
    double stod(String s){
        return Double.parseDouble(s);
    }
    //find minimum in a long array
    long lmin(long a[])
    {
        long min = Long.MAX_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(min > a[i])
                min = a[i];
        }
        return min;
    }
    //find minimum in a integer array
    int imin(int a[])
    {
        int min = Integer.MAX_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(min > a[i])
                min = a[i];
        }
        return min;
    }
    //find maximum in a long array
    long lmax(long a[])
    {
        long max = Long.MIN_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(max < a[i])
                max = a[i];
        }
        return max;
    }
    //find maximum in an integer array
    int imax(int a[])
    {
        int max = Integer.MIN_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(max < a[i])
                max = a[i];
        }
        return max;
    }
    //check whether an element is present in an integer array by binary search
    boolean ibs(int a[], int toFind)
    {
        Arrays.sort(a);
        int min = 0;
        int max = a.length-1;
        boolean found = false;

        while(min <= max && !found)
        {
            int mid = min + (max-min)/2;
            if(a[mid] == toFind)
            {
               found = true;
            }
            else if(toFind > a[mid])
            {
                min = mid+1;
            }
            else
            {
                max = mid-1;
            }

        }
        return found;
    }
    //check whether an element is present in a long array
    boolean lbs(long a[], long toFind)
    {
        Arrays.sort(a);
        int min = 0;
        int max = a.length-1;
        boolean found = false;

        while(min <= max && !found)
        {
            int mid = min + (max-min)/2;
            if(a[mid] == toFind)
            {
               found = true;
            }
            else if(toFind > a[mid])
            {
                min = mid+1;
            }
            else
            {
                max = mid-1;
            }

        }
        return found;
    }

} Main Scanner sc; sc //actual logic
void solve(){
    int a = ni();
    int b = ni();

    if((a+b) % 2 == 0)
    System.out.println((a + b) / 2);
    else
        System.out.println("IMPOSSIBLE");

} solve {
    int a = ni();
    int b = ni();

    if((a+b) % 2 == 0)
    System.out.println((a + b) / 2);
    else
        System.out.println("IMPOSSIBLE");

} int a = ni(); a ni() ni int b = ni(); b ni() ni if((a+b) % 2 == 0)
    System.out.println((a + b) / 2);
    else
        System.out.println("IMPOSSIBLE"); (a+b) % 2 == 0 (a+b) % 2 (a+b) a b 2 0 System.out.println((a + b) / 2) System.out.println System.out System System.out (a + b) / 2 (a + b) a b 2 System.out.println("IMPOSSIBLE") System.out.println System.out System System.out "IMPOSSIBLE" //constructor
    Main(){
        try{  
            sc = new Scanner(System.in);
        }catch(Exception e){
            System.out.println(e);
        }
    } Main {
        try{  
            sc = new Scanner(System.in);
        }catch(Exception e){
            System.out.println(e);
        }
    } try{  
            sc = new Scanner(System.in);
        }catch(Exception e){
            System.out.println(e);
        } catch(Exception e){
            System.out.println(e);
        } Exception e {
            System.out.println(e);
        } System.out.println(e) System.out.println System.out System System.out e {  
            sc = new Scanner(System.in);
        } sc = new Scanner(System.in) sc new Scanner(System.in) //main metohd
    public static void main(String[] args) 
    { 
    	new Main().solve();
    } main { 
    	new Main().solve();
    } new Main().solve() new Main().solve new Main() String[] args args //Utility methods
    //input an integer from scanner
    int ni()
    {
        int a = sc.nextInt();
        return a;
    } ni {
        int a = sc.nextInt();
        return a;
    } int a = sc.nextInt(); a sc.nextInt() sc.nextInt sc return a; a //input a long from scanner
    long nl()
    {
        return sc.nextLong();
    } nl {
        return sc.nextLong();
    } return sc.nextLong(); sc.nextLong() sc.nextLong sc //input a float from scanner
    float nf(){
        float a = sc.nextFloat();
        return a;
    } nf {
        float a = sc.nextFloat();
        return a;
    } float a = sc.nextFloat(); a sc.nextFloat() sc.nextFloat sc return a; a //input a double from scanner
    double nd(){
        double a = sc.nextDouble();
        return a;
    } nd {
        double a = sc.nextDouble();
        return a;
    } double a = sc.nextDouble(); a sc.nextDouble() sc.nextDouble sc return a; a //input a sentence from scanner
    String ns(){
        return sc.nextLine();
    } ns {
        return sc.nextLine();
    } return sc.nextLine(); sc.nextLine() sc.nextLine sc //converts a string to stringtokenizer
    StringTokenizer nst(String s){
        return new StringTokenizer(s);
    } nst {
        return new StringTokenizer(s);
    } return new StringTokenizer(s); new StringTokenizer(s) String s s //input an intger array
    void ia(int a[]){
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextInt();
    } ia {
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextInt();
    } for(int i = 0;i < a.length;i++)
            a[i] = sc.nextInt(); int i = 0; int i = 0; i 0 i < a.length i a.length a a.length i++ i++ i a[i] = sc.nextInt(); a[i] = sc.nextInt() a[i] a i sc.nextInt() sc.nextInt sc int a[] a //
    void la(long a[]){
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextLong();
    } la {
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextLong();
    } for(int i = 0;i < a.length;i++)
            a[i] = sc.nextLong(); int i = 0; int i = 0; i 0 i < a.length i a.length a a.length i++ i++ i a[i] = sc.nextLong(); a[i] = sc.nextLong() a[i] a i sc.nextLong() sc.nextLong sc long a[] a //input a float array
    void fa(float a[]){
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextFloat();
    } fa {
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextFloat();
    } for(int i = 0;i < a.length;i++)
            a[i] = sc.nextFloat(); int i = 0; int i = 0; i 0 i < a.length i a.length a a.length i++ i++ i a[i] = sc.nextFloat(); a[i] = sc.nextFloat() a[i] a i sc.nextFloat() sc.nextFloat sc float a[] a //input a double array
    void da(double a[]){
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextDouble();
    } da {
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextDouble();
    } for(int i = 0;i < a.length;i++)
            a[i] = sc.nextDouble(); int i = 0; int i = 0; i 0 i < a.length i a.length a a.length i++ i++ i a[i] = sc.nextDouble(); a[i] = sc.nextDouble() a[i] a i sc.nextDouble() sc.nextDouble sc double a[] a //input a string array either with all empty input or from scanner
    void sa(String a[], boolean empty){
        if(empty)
        {
            for(int i = 0;i < a.length;i++)
            {
                a[i] = "";
            }
        }
        else
        {
            for(int i = 0;i < a.length;i++)
            {
                a[i] = ns();
            }
        }
    } sa {
        if(empty)
        {
            for(int i = 0;i < a.length;i++)
            {
                a[i] = "";
            }
        }
        else
        {
            for(int i = 0;i < a.length;i++)
            {
                a[i] = ns();
            }
        }
    } if(empty)
        {
            for(int i = 0;i < a.length;i++)
            {
                a[i] = "";
            }
        }
        else
        {
            for(int i = 0;i < a.length;i++)
            {
                a[i] = ns();
            }
        } empty {
            for(int i = 0;i < a.length;i++)
            {
                a[i] = "";
            }
        } for(int i = 0;i < a.length;i++)
            {
                a[i] = "";
            } int i = 0; int i = 0; i 0 i < a.length i a.length a a.length i++ i++ i {
                a[i] = "";
            } {
                a[i] = "";
            } a[i] = "" a[i] a i "" {
            for(int i = 0;i < a.length;i++)
            {
                a[i] = ns();
            }
        } for(int i = 0;i < a.length;i++)
            {
                a[i] = ns();
            } int i = 0; int i = 0; i 0 i < a.length i a.length a a.length i++ i++ i {
                a[i] = ns();
            } {
                a[i] = ns();
            } a[i] = ns() a[i] a i ns() ns String a[] a boolean empty empty //input two dimensional integer array
    void ida(int a[][], int n, int m)
    {
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = ni();
            }
        }
    } ida {
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = ni();
            }
        }
    } for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = ni();
            }
        } int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = ni();
            }
        } {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = ni();
            }
        } for(int j = 0;j < m;j++)
            {
                a[i][j] = ni();
            } int j = 0; int j = 0; j 0 j < m j m j++ j++ j {
                a[i][j] = ni();
            } {
                a[i][j] = ni();
            } a[i][j] = ni() a[i][j] a[i] a i j ni() ni int a[][] a int n n int m m //input two dimentional long array
    void lda(long a[][], int n, int m)
    {
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = nl();
            }
        }
    } lda {
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = nl();
            }
        }
    } for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = nl();
            }
        } int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = nl();
            }
        } {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = nl();
            }
        } for(int j = 0;j < m;j++)
            {
                a[i][j] = nl();
            } int j = 0; int j = 0; j 0 j < m j m j++ j++ j {
                a[i][j] = nl();
            } {
                a[i][j] = nl();
            } a[i][j] = nl() a[i][j] a[i] a i j nl() nl long a[][] a int n n int m m //input two dimensional double array
    void dda(double a[][], int n, int m)
    {
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = nd();
            }
        }
    } dda {
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = nd();
            }
        }
    } for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = nd();
            }
        } int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = nd();
            }
        } {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = nd();
            }
        } for(int j = 0;j < m;j++)
            {
                a[i][j] = nd();
            } int j = 0; int j = 0; j 0 j < m j m j++ j++ j {
                a[i][j] = nd();
            } {
                a[i][j] = nd();
            } a[i][j] = nd() a[i][j] a[i] a i j nd() nd double a[][] a int n n int m m //convert string to integer
    int stoi(String s){
        return Integer.parseInt(s);
    } stoi {
        return Integer.parseInt(s);
    } return Integer.parseInt(s); Integer.parseInt(s) Integer.parseInt Integer s String s s //convert string to double
    double stod(String s){
        return Double.parseDouble(s);
    } stod {
        return Double.parseDouble(s);
    } return Double.parseDouble(s); Double.parseDouble(s) Double.parseDouble Double s String s s //find minimum in a long array
    long lmin(long a[])
    {
        long min = Long.MAX_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(min > a[i])
                min = a[i];
        }
        return min;
    } lmin {
        long min = Long.MAX_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(min > a[i])
                min = a[i];
        }
        return min;
    } long min = Long.MAX_VALUE; min Long.MAX_VALUE Long Long.MAX_VALUE for(int i = 0;i < a.length;i++)
        {
            if(min > a[i])
                min = a[i];
        } int i = 0; int i = 0; i 0 i < a.length i a.length a a.length i++ i++ i {
            if(min > a[i])
                min = a[i];
        } {
            if(min > a[i])
                min = a[i];
        } if(min > a[i])
                min = a[i]; min > a[i] min a[i] a i min = a[i] min a[i] a i return min; min long a[] a //find minimum in a integer array
    int imin(int a[])
    {
        int min = Integer.MAX_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(min > a[i])
                min = a[i];
        }
        return min;
    } imin {
        int min = Integer.MAX_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(min > a[i])
                min = a[i];
        }
        return min;
    } int min = Integer.MAX_VALUE; min Integer.MAX_VALUE Integer Integer.MAX_VALUE for(int i = 0;i < a.length;i++)
        {
            if(min > a[i])
                min = a[i];
        } int i = 0; int i = 0; i 0 i < a.length i a.length a a.length i++ i++ i {
            if(min > a[i])
                min = a[i];
        } {
            if(min > a[i])
                min = a[i];
        } if(min > a[i])
                min = a[i]; min > a[i] min a[i] a i min = a[i] min a[i] a i return min; min int a[] a //find maximum in a long array
    long lmax(long a[])
    {
        long max = Long.MIN_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(max < a[i])
                max = a[i];
        }
        return max;
    } lmax {
        long max = Long.MIN_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(max < a[i])
                max = a[i];
        }
        return max;
    } long max = Long.MIN_VALUE; max Long.MIN_VALUE Long Long.MIN_VALUE for(int i = 0;i < a.length;i++)
        {
            if(max < a[i])
                max = a[i];
        } int i = 0; int i = 0; i 0 i < a.length i a.length a a.length i++ i++ i {
            if(max < a[i])
                max = a[i];
        } {
            if(max < a[i])
                max = a[i];
        } if(max < a[i])
                max = a[i]; max < a[i] max a[i] a i max = a[i] max a[i] a i return max; max long a[] a //find maximum in an integer array
    int imax(int a[])
    {
        int max = Integer.MIN_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(max < a[i])
                max = a[i];
        }
        return max;
    } imax {
        int max = Integer.MIN_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(max < a[i])
                max = a[i];
        }
        return max;
    } int max = Integer.MIN_VALUE; max Integer.MIN_VALUE Integer Integer.MIN_VALUE for(int i = 0;i < a.length;i++)
        {
            if(max < a[i])
                max = a[i];
        } int i = 0; int i = 0; i 0 i < a.length i a.length a a.length i++ i++ i {
            if(max < a[i])
                max = a[i];
        } {
            if(max < a[i])
                max = a[i];
        } if(max < a[i])
                max = a[i]; max < a[i] max a[i] a i max = a[i] max a[i] a i return max; max int a[] a //check whether an element is present in an integer array by binary search
    boolean ibs(int a[], int toFind)
    {
        Arrays.sort(a);
        int min = 0;
        int max = a.length-1;
        boolean found = false;

        while(min <= max && !found)
        {
            int mid = min + (max-min)/2;
            if(a[mid] == toFind)
            {
               found = true;
            }
            else if(toFind > a[mid])
            {
                min = mid+1;
            }
            else
            {
                max = mid-1;
            }

        }
        return found;
    } ibs {
        Arrays.sort(a);
        int min = 0;
        int max = a.length-1;
        boolean found = false;

        while(min <= max && !found)
        {
            int mid = min + (max-min)/2;
            if(a[mid] == toFind)
            {
               found = true;
            }
            else if(toFind > a[mid])
            {
                min = mid+1;
            }
            else
            {
                max = mid-1;
            }

        }
        return found;
    } Arrays.sort(a) Arrays.sort Arrays a int min = 0; min 0 int max = a.length-1; max a.length-1 a.length a a.length 1 boolean found = false; found false while(min <= max && !found)
        {
            int mid = min + (max-min)/2;
            if(a[mid] == toFind)
            {
               found = true;
            }
            else if(toFind > a[mid])
            {
                min = mid+1;
            }
            else
            {
                max = mid-1;
            }

        } min <= max && !found min <= max min max !found found {
            int mid = min + (max-min)/2;
            if(a[mid] == toFind)
            {
               found = true;
            }
            else if(toFind > a[mid])
            {
                min = mid+1;
            }
            else
            {
                max = mid-1;
            }

        } int mid = min + (max-min)/2; mid min + (max-min)/2 min (max-min)/2 (max-min) max min 2 if(a[mid] == toFind)
            {
               found = true;
            }
            else if(toFind > a[mid])
            {
                min = mid+1;
            }
            else
            {
                max = mid-1;
            } a[mid] == toFind a[mid] a mid toFind {
               found = true;
            } found = true found true if(toFind > a[mid])
            {
                min = mid+1;
            }
            else
            {
                max = mid-1;
            } toFind > a[mid] toFind a[mid] a mid {
                min = mid+1;
            } min = mid+1 min mid+1 mid 1 {
                max = mid-1;
            } max = mid-1 max mid-1 mid 1 return found; found int a[] a int toFind toFind //check whether an element is present in a long array
    boolean lbs(long a[], long toFind)
    {
        Arrays.sort(a);
        int min = 0;
        int max = a.length-1;
        boolean found = false;

        while(min <= max && !found)
        {
            int mid = min + (max-min)/2;
            if(a[mid] == toFind)
            {
               found = true;
            }
            else if(toFind > a[mid])
            {
                min = mid+1;
            }
            else
            {
                max = mid-1;
            }

        }
        return found;
    } lbs {
        Arrays.sort(a);
        int min = 0;
        int max = a.length-1;
        boolean found = false;

        while(min <= max && !found)
        {
            int mid = min + (max-min)/2;
            if(a[mid] == toFind)
            {
               found = true;
            }
            else if(toFind > a[mid])
            {
                min = mid+1;
            }
            else
            {
                max = mid-1;
            }

        }
        return found;
    } Arrays.sort(a) Arrays.sort Arrays a int min = 0; min 0 int max = a.length-1; max a.length-1 a.length a a.length 1 boolean found = false; found false while(min <= max && !found)
        {
            int mid = min + (max-min)/2;
            if(a[mid] == toFind)
            {
               found = true;
            }
            else if(toFind > a[mid])
            {
                min = mid+1;
            }
            else
            {
                max = mid-1;
            }

        } min <= max && !found min <= max min max !found found {
            int mid = min + (max-min)/2;
            if(a[mid] == toFind)
            {
               found = true;
            }
            else if(toFind > a[mid])
            {
                min = mid+1;
            }
            else
            {
                max = mid-1;
            }

        } int mid = min + (max-min)/2; mid min + (max-min)/2 min (max-min)/2 (max-min) max min 2 if(a[mid] == toFind)
            {
               found = true;
            }
            else if(toFind > a[mid])
            {
                min = mid+1;
            }
            else
            {
                max = mid-1;
            } a[mid] == toFind a[mid] a mid toFind {
               found = true;
            } found = true found true if(toFind > a[mid])
            {
                min = mid+1;
            }
            else
            {
                max = mid-1;
            } toFind > a[mid] toFind a[mid] a mid {
                min = mid+1;
            } min = mid+1 min mid+1 mid 1 {
                max = mid-1;
            } max = mid-1 max mid-1 mid 1 return found; found long a[] a long toFind toFind public class Main 
{ 
    Scanner sc;

//actual logic
void solve(){
    int a = ni();
    int b = ni();

    if((a+b) % 2 == 0)
    System.out.println((a + b) / 2);
    else
        System.out.println("IMPOSSIBLE");

}


//constructor
    Main(){
        try{  
            sc = new Scanner(System.in);
        }catch(Exception e){
            System.out.println(e);
        }
    }


//main metohd
    public static void main(String[] args) 
    { 
    	new Main().solve();
    }


//Utility methods
    //input an integer from scanner
    int ni()
    {
        int a = sc.nextInt();
        return a;
    }
    //input a long from scanner
    long nl()
    {
        return sc.nextLong();
    }
    //input a float from scanner
    float nf(){
        float a = sc.nextFloat();
        return a;
    }
    //input a double from scanner
    double nd(){
        double a = sc.nextDouble();
        return a;
    }
    //input a sentence from scanner
    String ns(){
        return sc.nextLine();
    }
    //converts a string to stringtokenizer
    StringTokenizer nst(String s){
        return new StringTokenizer(s);
    }
    //input an intger array
    void ia(int a[]){
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextInt();
    }
    //
    void la(long a[]){
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextLong();
    }
    //input a float array
    void fa(float a[]){
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextFloat();
    }
    //input a double array
    void da(double a[]){
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextDouble();
    }
    //input a string array either with all empty input or from scanner
    void sa(String a[], boolean empty){
        if(empty)
        {
            for(int i = 0;i < a.length;i++)
            {
                a[i] = "";
            }
        }
        else
        {
            for(int i = 0;i < a.length;i++)
            {
                a[i] = ns();
            }
        }
    }
    //input two dimensional integer array
    void ida(int a[][], int n, int m)
    {
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = ni();
            }
        }
    }
    //input two dimentional long array
    void lda(long a[][], int n, int m)
    {
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = nl();
            }
        }
    }
    //input two dimensional double array
    void dda(double a[][], int n, int m)
    {
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = nd();
            }
        }
    }
    //convert string to integer
    int stoi(String s){
        return Integer.parseInt(s);
    }
    //convert string to double
    double stod(String s){
        return Double.parseDouble(s);
    }
    //find minimum in a long array
    long lmin(long a[])
    {
        long min = Long.MAX_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(min > a[i])
                min = a[i];
        }
        return min;
    }
    //find minimum in a integer array
    int imin(int a[])
    {
        int min = Integer.MAX_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(min > a[i])
                min = a[i];
        }
        return min;
    }
    //find maximum in a long array
    long lmax(long a[])
    {
        long max = Long.MIN_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(max < a[i])
                max = a[i];
        }
        return max;
    }
    //find maximum in an integer array
    int imax(int a[])
    {
        int max = Integer.MIN_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(max < a[i])
                max = a[i];
        }
        return max;
    }
    //check whether an element is present in an integer array by binary search
    boolean ibs(int a[], int toFind)
    {
        Arrays.sort(a);
        int min = 0;
        int max = a.length-1;
        boolean found = false;

        while(min <= max && !found)
        {
            int mid = min + (max-min)/2;
            if(a[mid] == toFind)
            {
               found = true;
            }
            else if(toFind > a[mid])
            {
                min = mid+1;
            }
            else
            {
                max = mid-1;
            }

        }
        return found;
    }
    //check whether an element is present in a long array
    boolean lbs(long a[], long toFind)
    {
        Arrays.sort(a);
        int min = 0;
        int max = a.length-1;
        boolean found = false;

        while(min <= max && !found)
        {
            int mid = min + (max-min)/2;
            if(a[mid] == toFind)
            {
               found = true;
            }
            else if(toFind > a[mid])
            {
                min = mid+1;
            }
            else
            {
                max = mid-1;
            }

        }
        return found;
    }

} public class Main 
{ 
    Scanner sc;

//actual logic
void solve(){
    int a = ni();
    int b = ni();

    if((a+b) % 2 == 0)
    System.out.println((a + b) / 2);
    else
        System.out.println("IMPOSSIBLE");

}


//constructor
    Main(){
        try{  
            sc = new Scanner(System.in);
        }catch(Exception e){
            System.out.println(e);
        }
    }


//main metohd
    public static void main(String[] args) 
    { 
    	new Main().solve();
    }


//Utility methods
    //input an integer from scanner
    int ni()
    {
        int a = sc.nextInt();
        return a;
    }
    //input a long from scanner
    long nl()
    {
        return sc.nextLong();
    }
    //input a float from scanner
    float nf(){
        float a = sc.nextFloat();
        return a;
    }
    //input a double from scanner
    double nd(){
        double a = sc.nextDouble();
        return a;
    }
    //input a sentence from scanner
    String ns(){
        return sc.nextLine();
    }
    //converts a string to stringtokenizer
    StringTokenizer nst(String s){
        return new StringTokenizer(s);
    }
    //input an intger array
    void ia(int a[]){
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextInt();
    }
    //
    void la(long a[]){
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextLong();
    }
    //input a float array
    void fa(float a[]){
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextFloat();
    }
    //input a double array
    void da(double a[]){
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextDouble();
    }
    //input a string array either with all empty input or from scanner
    void sa(String a[], boolean empty){
        if(empty)
        {
            for(int i = 0;i < a.length;i++)
            {
                a[i] = "";
            }
        }
        else
        {
            for(int i = 0;i < a.length;i++)
            {
                a[i] = ns();
            }
        }
    }
    //input two dimensional integer array
    void ida(int a[][], int n, int m)
    {
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = ni();
            }
        }
    }
    //input two dimentional long array
    void lda(long a[][], int n, int m)
    {
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = nl();
            }
        }
    }
    //input two dimensional double array
    void dda(double a[][], int n, int m)
    {
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = nd();
            }
        }
    }
    //convert string to integer
    int stoi(String s){
        return Integer.parseInt(s);
    }
    //convert string to double
    double stod(String s){
        return Double.parseDouble(s);
    }
    //find minimum in a long array
    long lmin(long a[])
    {
        long min = Long.MAX_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(min > a[i])
                min = a[i];
        }
        return min;
    }
    //find minimum in a integer array
    int imin(int a[])
    {
        int min = Integer.MAX_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(min > a[i])
                min = a[i];
        }
        return min;
    }
    //find maximum in a long array
    long lmax(long a[])
    {
        long max = Long.MIN_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(max < a[i])
                max = a[i];
        }
        return max;
    }
    //find maximum in an integer array
    int imax(int a[])
    {
        int max = Integer.MIN_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(max < a[i])
                max = a[i];
        }
        return max;
    }
    //check whether an element is present in an integer array by binary search
    boolean ibs(int a[], int toFind)
    {
        Arrays.sort(a);
        int min = 0;
        int max = a.length-1;
        boolean found = false;

        while(min <= max && !found)
        {
            int mid = min + (max-min)/2;
            if(a[mid] == toFind)
            {
               found = true;
            }
            else if(toFind > a[mid])
            {
                min = mid+1;
            }
            else
            {
                max = mid-1;
            }

        }
        return found;
    }
    //check whether an element is present in a long array
    boolean lbs(long a[], long toFind)
    {
        Arrays.sort(a);
        int min = 0;
        int max = a.length-1;
        boolean found = false;

        while(min <= max && !found)
        {
            int mid = min + (max-min)/2;
            if(a[mid] == toFind)
            {
               found = true;
            }
            else if(toFind > a[mid])
            {
                min = mid+1;
            }
            else
            {
                max = mid-1;
            }

        }
        return found;
    }

} Main

// Java program For handling Input/Output 
import java.io.*; 
import java.util.*;
import java.math.*;


public class Main 
{ 
    Scanner sc;

//actual logic
void solve(){
    int a = ni();
    int b = ni();

    if((a+b) % 2 == 0)
    System.out.println((a + b) / 2);
    else
        System.out.println("IMPOSSIBLE");

}


//constructor
    Main(){
        try{  
            sc = new Scanner(System.in);
        }catch(Exception e){
            System.out.println(e);
        }
    }


//main metohd
    public static void main(String[] args) 
    { 
    	new Main().solve();
    }


//Utility methods
    //input an integer from scanner
    int ni()
    {
        int a = sc.nextInt();
        return a;
    }
    //input a long from scanner
    long nl()
    {
        return sc.nextLong();
    }
    //input a float from scanner
    float nf(){
        float a = sc.nextFloat();
        return a;
    }
    //input a double from scanner
    double nd(){
        double a = sc.nextDouble();
        return a;
    }
    //input a sentence from scanner
    String ns(){
        return sc.nextLine();
    }
    //converts a string to stringtokenizer
    StringTokenizer nst(String s){
        return new StringTokenizer(s);
    }
    //input an intger array
    void ia(int a[]){
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextInt();
    }
    //
    void la(long a[]){
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextLong();
    }
    //input a float array
    void fa(float a[]){
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextFloat();
    }
    //input a double array
    void da(double a[]){
        for(int i = 0;i < a.length;i++)
            a[i] = sc.nextDouble();
    }
    //input a string array either with all empty input or from scanner
    void sa(String a[], boolean empty){
        if(empty)
        {
            for(int i = 0;i < a.length;i++)
            {
                a[i] = "";
            }
        }
        else
        {
            for(int i = 0;i < a.length;i++)
            {
                a[i] = ns();
            }
        }
    }
    //input two dimensional integer array
    void ida(int a[][], int n, int m)
    {
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = ni();
            }
        }
    }
    //input two dimentional long array
    void lda(long a[][], int n, int m)
    {
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = nl();
            }
        }
    }
    //input two dimensional double array
    void dda(double a[][], int n, int m)
    {
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                a[i][j] = nd();
            }
        }
    }
    //convert string to integer
    int stoi(String s){
        return Integer.parseInt(s);
    }
    //convert string to double
    double stod(String s){
        return Double.parseDouble(s);
    }
    //find minimum in a long array
    long lmin(long a[])
    {
        long min = Long.MAX_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(min > a[i])
                min = a[i];
        }
        return min;
    }
    //find minimum in a integer array
    int imin(int a[])
    {
        int min = Integer.MAX_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(min > a[i])
                min = a[i];
        }
        return min;
    }
    //find maximum in a long array
    long lmax(long a[])
    {
        long max = Long.MIN_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(max < a[i])
                max = a[i];
        }
        return max;
    }
    //find maximum in an integer array
    int imax(int a[])
    {
        int max = Integer.MIN_VALUE;
        for(int i = 0;i < a.length;i++)
        {
            if(max < a[i])
                max = a[i];
        }
        return max;
    }
    //check whether an element is present in an integer array by binary search
    boolean ibs(int a[], int toFind)
    {
        Arrays.sort(a);
        int min = 0;
        int max = a.length-1;
        boolean found = false;

        while(min <= max && !found)
        {
            int mid = min + (max-min)/2;
            if(a[mid] == toFind)
            {
               found = true;
            }
            else if(toFind > a[mid])
            {
                min = mid+1;
            }
            else
            {
                max = mid-1;
            }

        }
        return found;
    }
    //check whether an element is present in a long array
    boolean lbs(long a[], long toFind)
    {
        Arrays.sort(a);
        int min = 0;
        int max = a.length-1;
        boolean found = false;

        while(min <= max && !found)
        {
            int mid = min + (max-min)/2;
            if(a[mid] == toFind)
            {
               found = true;
            }
            else if(toFind > a[mid])
            {
                min = mid+1;
            }
            else
            {
                max = mid-1;
            }

        }
        return found;
    }

}