using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace CodeForces
{
    public class Test
    {
        public static void Main()
        {
            int[] nk = Array.ConvertAll(Console.ReadLine().Split(' '), x => Convert.ToInt32(x));
            int n = nk[0];
            int k = nk[1];
            int[] arr = Array.ConvertAll(Console.ReadLine().Split(' '), x => Convert.ToInt32(x));
            Array.Sort(arr);
            bool res = true;
            if (k > 0)
            {
                if (arr[0] == 1 || arr[k - 1] == n)
                {
                    res = false;
                }
                else
                {
                    for (int i = 2; i < k; i++)
                    {
                        if (arr[i] == arr[i - 1] + 1 && arr[i] == arr[i - 2] + 2) //Three consecutive dirty steps
                        {
                            res = false;
                            break;
                        }
                    }
                }

                Console.WriteLine(res ? "YES" : "NO");
            }
        }

    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace CodeForces
{
    public class Test
    {
        public static void Main()
        {
            int[] nk = Array.ConvertAll(Console.ReadLine().Split(' '), x => Convert.ToInt32(x));
            int n = nk[0];
            int k = nk[1];
            int[] arr = Array.ConvertAll(Console.ReadLine().Split(' '), x => Convert.ToInt32(x));
            Array.Sort(arr);
            bool res = true;
            if (arr[0] == 1 || arr[k - 1] == n)
            {
                res = false;
            }
            else
            {
                for (int i = 2; i < k; i++)
                {
                    if (arr[i] == arr[i - 1] + 1 && arr[i] == arr[i - 2] + 2) //Three consecutive dirty steps
                    {
                        res = false;
                        break;
                    }
                }
            }
            Console.WriteLine(res ? "YES" : "NO");

        }

    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace CodeForces
{
    public class Test
    {
        public static void Main()
        {
            int[] nk = Array.ConvertAll(Console.ReadLine().Split(' '), x => Convert.ToInt32(x));
            int n = nk[0];
            int k = nk[1];
            bool res = true;
            if (k > 0)
            {
                int[] arr = Array.ConvertAll(Console.ReadLine().Split(' '), x => Convert.ToInt32(x));
                Array.Sort(arr);
                if (arr[0] == 1 || arr[k - 1] == n)
                {
                    res = false;
                }
                else
                {
                    for (int i = 2; i < k; i++)
                    {
                        if (arr[i] == arr[i - 1] + 1 && arr[i] == arr[i - 2] + 2) //Three consecutive dirty steps
                        {
                            res = false;
                            break;
                        }
                    }
                }

                Console.WriteLine(res ? "YES" : "NO");
            }
            else
            {
                Console.WriteLine("YES");
            }
        }

    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

class GFG
{

    public static void Main()
    {

        var input = Console.ReadLine().Split(' ');
        var n = int.Parse(input[0]);
        var m = int.Parse(input[1]);

        var arr = Console.ReadLine().Split(' ').Select(x => int.Parse(x)).ToDictionary(x => x);

        int start = 1;

        if (arr.ContainsKey(start))
        {
            Console.Write("NO");
            return;
        }
        if (arr.ContainsKey(n))
        {
            Console.Write("NO");
            return;
        }
        while (start <= n)
        {
            start++;
            if (arr.ContainsKey(start))
            {
                start++;
                if (arr.ContainsKey(start))
                {
                    start++;
                    if (arr.ContainsKey(start))
                    {
                        Console.Write("NO");
                        return;
                    }

                }

            }

        }

        Console.Write("YES");

    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

class GFG
{

    public static void Main()
    {

        var input = Console.ReadLine().Split(' ');
        var n = int.Parse(input[0]);
        var m = int.Parse(input[1]);

        var arr = Console.ReadLine().Split(' ').Select(x => int.Parse(x)).ToArray();
        Array.Sort(arr);
        int start = 1;

        if (arr[0] == start)
        {
            Console.Write("NO");
            return;
        }
        if (arr[m - 1] == n)
        {
            Console.Write("NO");
            return;
        }

        for (int i = 2; i < m; i++)
        {
            if (arr[i] - 1 == arr[i - 1] && arr[i - 1] - 1 == arr[i - 2])
            {
                Console.Write("NO");
                return;
            }
        }

        Console.Write("YES");

    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

class GFG
{

    public static void Main()
    {

        var input = Console.ReadLine().Split(' ');
        var n = int.Parse(input[0]);
        var m = int.Parse(input[1]);
        if (m == 0)
        {
            Console.Write("YES");
            return;
        }
        var arr = Console.ReadLine().Split(' ').Select(x => int.Parse(x)).ToArray();
        Array.Sort(arr);
        int start = 1;

        if (arr[0] == start)
        {
            Console.Write("NO");
            return;
        }
        if (arr[m - 1] == n)
        {
            Console.Write("NO");
            return;
        }

        for (int i = 2; i < m; i++)
        {
            if (arr[i] - 1 == arr[i - 1] && arr[i - 1] - 1 == arr[i - 2])
            {
                Console.Write("NO");
                return;
            }
        }

        Console.Write("YES");

    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Petya_and_Staircases
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] input = Console.ReadLine().Split(' ');
            int n = Int32.Parse(input[0]);
            int m = Int32.Parse(input[1]);
            bool exist = true;
            int[] a = Array.ConvertAll(Console.ReadLine().Split(' '), Int32.Parse);
            Array.Sort(a);
            if (a.Contains(1) || a.Contains(n))
                Console.WriteLine("NO");
            else
            {
                for (int i = 0; i < m - 2; i++)
                {
                    if (a[i + 1] - a[i] == 1 && a[i + 2] - a[i + 1] == 1)
                    {
                        exist = false;
                        break;
                    }
                }
                if (exist)
                    Console.WriteLine("YES");
                else
                    Console.WriteLine("NO");
            }
            Console.ReadLine();
        }
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Petya_and_Staircases
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] input = Console.ReadLine().Split(' ');
            int n = Int32.Parse(input[0]);
            int m = Int32.Parse(input[1]);
            bool exist = true;
            if (m > 0)
            {
                int[] a = Array.ConvertAll(Console.ReadLine().Split(' '), Int32.Parse);
                Array.Sort(a);

                if (a.Contains(1) || a.Contains(n))
                    Console.WriteLine("NO");
                else
                {
                    for (int i = 0; i < m - 2; i++)
                    {
                        if (a[i + 1] - a[i] == 1 && a[i + 2] - a[i + 1] == 1)
                        {
                            exist = false;
                            break;
                        }
                    }
                    if (exist)
                        Console.WriteLine("YES");
                    else
                        Console.WriteLine("NO");
                }
            }
            else
                Console.WriteLine("YES");
            Console.ReadLine();
        }
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] str = Console.ReadLine().Split(' ');
            int n = int.Parse(str[0]);
            int m = int.Parse(str[1]);
            if (m != 0)
            {
                bool y = true;
                int k = 1;
                str = Console.ReadLine().Split(' ');
                Array.Sort(str);
                if (str[0] == "1" || str[str.Length - 1] == n + "")
                    Console.WriteLine("NO");
                else
                {
                    for (int i = 0; i < m - 1; i++)
                    {
                        if (int.Parse(str[i]) == 1 || int.Parse(str[i + 1]) == 1 || int.Parse(str[i]) == n || int.Parse(str[i + 1]) == n)
                        { y = false; break; }
                        if (int.Parse(str[i + 1]) - int.Parse(str[i]) == 1)
                            k++;
                        else
                            k = 1;
                        if (k > 2)
                        { y = false; break; }
                    }
                    Console.WriteLine((y) ? "YES" : "NO");
                }
            }
            else
                Console.WriteLine("YES");
        }
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] str = Console.ReadLine().Split(' ');
            int n = int.Parse(str[0]);
            int m = int.Parse(str[1]);
            if (m != 0)
            {
                bool y = true;
                int k = 1;
                str = Console.ReadLine().Split(' ');
                Array.Sort(str);
                if (str[0] == "1" || str[str.Length - 1] == n + "")
                    Console.WriteLine("NO");
                else
                {
                    for (int i = 0; i < m - 1; i++)
                    {
                        if (int.Parse(str[i]) == 1 || int.Parse(str[i + 1]) == 1 || int.Parse(str[i]) == n || int.Parse(str[i + 1]) == n)
                        { y = false; break; }
                        if (k > 2)
                        { y = false; break; }
                        if (int.Parse(str[i + 1]) - int.Parse(str[i]) == 1)
                            k++;
                        else
                            k = 1;
                    }
                    Console.WriteLine((y) ? "YES" : "NO");
                }
            }
            else
                Console.WriteLine("YES");
        }
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] str = Console.ReadLine().Split(' ');
            long n = long.Parse(str[0]);
            long m = long.Parse(str[1]);
            long[] s = new long[n]; bool y = true;
            long k = 0;
            str = Console.ReadLine().Split(' ');
            for (long i = 0; i < m; i++)
                s[long.Parse(str[i]) - 1] = 1;
            if (s[0] == 1 || s[s.Length - 1] == 1)
                Console.WriteLine("NO");
            else
            {
                for (long i = 1; i < n - 1; i++)
                {
                    if (s[i] == 1)
                        k++;
                    else
                    {
                        if (k > 2)
                        {  y = false; break; }
                        k = 0;
                    }
                }
                Console.WriteLine((y) ? "YES" : "NO");
            }
        }
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] str = Console.ReadLine().Split(' ');
            int n = int.Parse(str[0]);
            int m = int.Parse(str[1]);
            int[] s = new int[n]; bool y = true;
            int k = 0;
            str = Console.ReadLine().Split(' ');
            for (int i = 0; i < m; i++)
                s[int.Parse(str[i])-1] = 1;
            if (s[0] == 1 || s[s.Length - 1] == 1)
                Console.WriteLine("NO");
            else
            {
                for (int i = 0; i < n - 3; i++)
                {
                    if (s[i] == 1)
                        k++;
                    else
                    {
                        if (k > 2)
                        {  y = false; break; }
                        k = 0;
                    }
                }
                Console.WriteLine((y) ? "YES" : "NO");
            }
        }
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] str = Console.ReadLine().Split(' ');
            int n = int.Parse(str[0]);
            int m = int.Parse(str[1]);
            int[] s = new int[m];  bool y = true;
            int k = 1;
            List<string> List = new List<string>();
            List.AddRange(Console.ReadLine().Split(' '));
            for (int i = 0; i < m; i++)
            {
                string max = int.MaxValue+"";
                int ind = 0;
                for (int j = 0; j < List.Count; j++)
                {
                    if (int.Parse(max) > int.Parse(List[j]))
                    { ind = j; max = List[j]; }
                }
                s[i] = int.Parse(List[ind]);
                List.RemoveAt(ind);
            }
             if (s[0] == 1 || s[s.Length - 1] == n)
                 Console.WriteLine("NO");
             else
             {
                 for (int i = 0; i < m - 1; i++)
                 {
                     if (k > 2)
                     { y = false; break; }
                     if (s[i + 1] - s[i] == 1)
                         k++;
                     else
                         k = 1;
                 }
                 Console.WriteLine((y) ? "YES" : "NO");
             }
        }
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] str = Console.ReadLine().Split(' ');
            int n = int.Parse(str[0]);
            int m = int.Parse(str[1]);
            if (m != 0)
            {
                bool y = true;
                int k = 1;
                List<string> List = new List<string>();
                str = Console.ReadLine().Split(' ');
                Array.Sort(str);
                List.AddRange(str);
                if (str[0] == "1" || str[str.Length - 1] == n + "")
                    Console.WriteLine("NO");
                else
                {
                    for (int i = 0; i < m - 1; i++)
                    {
                        if (k > 2)
                        { y = false; break; }
                        if (int.Parse(str[i + 1]) - int.Parse(str[i]) == 1)
                            k++;
                        else
                            k = 1;
                    }
                    Console.WriteLine((y) ? "YES" : "NO");
                }
            }
            else
                Console.WriteLine("YES");
        }
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] str = Console.ReadLine().Split(' ');
            int n = int.Parse(str[0]);
            int m = int.Parse(str[1]);
            bool y = true;
            int k = 1;
            List<string> List = new List<string>();
            str = Console.ReadLine().Split(' ');
            Array.Sort(str);
            List.AddRange(str);
             if (str[0] == "1" || str[str.Length - 1] == n+"")
                 Console.WriteLine("NO");
             else
             {
                 for (int i = 0; i < m - 1; i++)
                 {
                     if (k > 2)
                     { y = false; break; }
                     if (int.Parse(str[i + 1]) - int.Parse(str[i]) == 1)
                         k++;
                     else
                         k = 1;
                 }
                 Console.WriteLine((y) ? "YES" : "NO");
             }
        }
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] str = Console.ReadLine().Split(' ');
            int n = int.Parse(str[0]);
            int m = int.Parse(str[1]);
            int[] s = new int[m];  bool y = true;
            int k = 1;
            str = Console.ReadLine().Split(' ');
            for (int i = 0; i < m; i++)
            {
                string max = int.MaxValue+"";
                int ind = 0;
                for (int j = 0; j < m; j++)
                {
                    if(str[j]!="*")
                    if (int.Parse(max) > int.Parse(str[j]))
                    { ind = j; max = str[j]; }
                }
                s[i] = int.Parse(str[ind]);
                str[ind] = "*";
            }
            if (s[0] == 1 || s[s.Length - 1] == n)
                Console.WriteLine("NO");
            else
            {
                for (int i = 0; i < m - 1; i++)
                {
                    if (k > 2)
                    { y = false; break; }
                    if (s[i + 1] - s[i] == 1)
                        k++;
                    else
                        k = 1;
                }
                Console.WriteLine((y) ? "YES" : "NO");
            }
        }
    }
}


using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace CodeForces
{
    public class CodeForces
    {
        static void Main(string[] args)
        {
            var line = Console.ReadLine().Split();
            var n = int.Parse(line[0]);
            var m = int.Parse(line[1]);
            if (m == 0)
            {
                Console.WriteLine("YES");
                return;
            }
            var arr = GetArray();
            Console.WriteLine(Solve(n,m, arr)? "YES":"NO");
            // Tests();//

        }

        public static void Tests()
        {
            //\
        }

        public static bool Solve(int n, int m, int[] arr)
        {

            var ls = arr.ToList();
            ls.Sort();
            if (ls[0] == 1 || ls[m-1] == n)
            {
                return false;
            }
            var fs = ls[0];
            for (var i = 1; i < m - 1; i++)
            {
                if (ls[i] == ls[i-1] + 1 && ls[i] + 1 == ls[i+1])
                {
                    return false;
                }
            }
            return true;
        }

        static int[] GetArray()
        {
            return Array.ConvertAll(Console.ReadLine().Split(), Convert.ToInt32);
        }

        public static void SieveOfErathostenes(int upperLimit)
        {
            //BitArray works just like a bool[] but takes up a lot less space.
            BitArray composite = new BitArray(upperLimit);

            //Only need to cross off numbers up to sqrt.
            int sqrt = (int)Math.Sqrt(upperLimit);
            for (int p = 2; p <= sqrt; ++p)
            {
                if (composite[p])
                    continue; //The number is crossed off; skip it

                //Cross off each multiple of this prime
                //Start at the prime squared, because lower numbers will
                //have been crossed off already. No need to check them.
                for (int i = p * p; i < upperLimit; i += p)
                    composite[i] = true;
            }
            long cn = 0;
            for (var i = 2; i < upperLimit; i++)
            {
                if (!composite[i])
                    cn++;
            }
            Console.WriteLine(upperLimit + " " + cn);
        }

    }
}


using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace CodeForces
{
    public class CodeForces
    {
        static void Main(string[] args)
        {
            var line = Console.ReadLine().Split();
            var n = int.Parse(line[0]);
            var m = int.Parse(line[1]);
            var arr = GetArray();
            Console.WriteLine(Solve(n,m, arr)? "YES":"NO");
            // Tests();//

        }

        public static void Tests()
        {
            //\
        }

        public static bool Solve(int n, int m, int[] arr)
        {

            var ls = arr.ToList();
            ls.Sort();
            if (ls[0] == 1 || ls[m-1] == n)
            {
                return false;
            }
            var fs = ls[0];
            for (var i = 1; i < m - 1; i++)
            {
                if (ls[i] == ls[i-1] + 1 && ls[i] + 1 == ls[i+1])
                {
                    return false;
                }
            }
            return true;
        }

        static int[] GetArray()
        {
            return Array.ConvertAll(Console.ReadLine().Split(), Convert.ToInt32);
        }

        public static void SieveOfErathostenes(int upperLimit)
        {
            //BitArray works just like a bool[] but takes up a lot less space.
            BitArray composite = new BitArray(upperLimit);

            //Only need to cross off numbers up to sqrt.
            int sqrt = (int)Math.Sqrt(upperLimit);
            for (int p = 2; p <= sqrt; ++p)
            {
                if (composite[p])
                    continue; //The number is crossed off; skip it

                //Cross off each multiple of this prime
                //Start at the prime squared, because lower numbers will
                //have been crossed off already. No need to check them.
                for (int i = p * p; i < upperLimit; i += p)
                    composite[i] = true;
            }
            long cn = 0;
            for (var i = 2; i < upperLimit; i++)
            {
                if (!composite[i])
                    cn++;
            }
            Console.WriteLine(upperLimit + " " + cn);
        }

    }
}


#region Usings
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;

using static System.Math;
#endregion

// https://codeforces.com/problemset/problem/362/B
public class B___Petya_and_Staircases
{
    private static void Solve()
    {
        int n = ReadInt();
        int m = ReadInt();

        if (m == 0)
        {
            Write("YES");
            return;
        }

        int[] A = ReadIntArray();
        A = A.OrderBy(x => x).ToArray();

        if (A[0] == 1 || A[m - 1] == n)
        {
            Write("NO");
            return;
        }

        for (int i = 2; i < m; i++)
        {
            if (A[i - 2] + 1 == A[i - 1] && A[i - 1] + 1 == A[i])
            {
                Write("NO");
                return;
            }
        }

        Write("YES");
    }

    #region Main

    private static TextReader reader;
    private static TextWriter writer;

    public static void Main()
    {
#if DEBUG

        //reader = new StreamReader("C:\\Users\\Axel\\Desktop\\input.txt");
        reader = new StreamReader(Console.OpenStandardInput());
        writer = Console.Out;

        //writer = new StreamWriter("..\\..\\output.txt");
#else
        reader = new StreamReader(Console.OpenStandardInput());
        writer = new StreamWriter(Console.OpenStandardOutput());

        //reader = new StreamReader("input.txt");
        //writer = new StreamWriter("output.txt");
#endif
        try
        {
            Solve();

            //var thread = new Thread(new String_Task().Solve, 1024 * 1024 * 128);
            //thread.Start();
            //thread.Join();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
#if DEBUG
#else
            throw;
#endif
        }
        reader.Close();
        writer.Close();
    }

    #endregion Main

    #region Read / Write

    private static Queue<string> currentLineTokens = new Queue<string>();

    private static string[] ReadAndSplitLine()
    {
        return reader.ReadLine().Split(new[] { ' ', '\t', }, StringSplitOptions.RemoveEmptyEntries);
    }

    public static string Read()
    {
        while (currentLineTokens.Count == 0) currentLineTokens = new Queue<string>(ReadAndSplitLine()); return currentLineTokens.Dequeue();
    }

    public static int ReadInt()
    {
        return int.Parse(Read());
    }

    public static long ReadLong()
    {
        return long.Parse(Read());
    }

    public static double ReadDouble()
    {
        return double.Parse(Read(), CultureInfo.InvariantCulture);
    }

    public static int[] ReadIntArray()
    {
        return ReadAndSplitLine().Select(int.Parse).ToArray();
    }

    public static long[] ReadLongArray()
    {
        return ReadAndSplitLine().Select(long.Parse).ToArray();
    }

    public static double[] ReadDoubleArray()
    {
        return ReadAndSplitLine().Select(s => double.Parse(s, CultureInfo.InvariantCulture)).ToArray();
    }

    public static int[][] ReadIntMatrix(int numberOfRows)
    {
        int[][] matrix = new int[numberOfRows][]; for (int i = 0; i < numberOfRows; i++) matrix[i] = ReadIntArray(); return matrix;
    }

    public static int[][] ReadAndTransposeIntMatrix(int numberOfRows)
    {
        int[][] matrix = ReadIntMatrix(numberOfRows); int[][] ret = new int[matrix[0].Length][];
        for (int i = 0; i < ret.Length; i++) { ret[i] = new int[numberOfRows]; for (int j = 0; j < numberOfRows; j++) ret[i][j] = matrix[j][i]; }
        return ret;
    }

    public static string[] ReadLines(int quantity)
    {
        string[] lines = new string[quantity]; for (int i = 0; i < quantity; i++) lines[i] = reader.ReadLine().Trim(); return lines;
    }

    public static void WriteArray<T>(IEnumerable<T> array)
    {
        writer.WriteLine(string.Join(" ", array));
    }

    public static void Write(params object[] array)
    {
        WriteArray(array);
    }

    public static void WriteLines<T>(IEnumerable<T> array)
    {
        foreach (var a in array) writer.WriteLine(a);
    }

    private class SDictionary<TKey, TValue> : Dictionary<TKey, TValue>
    {
        public new TValue this[TKey key]
        {
            get { return ContainsKey(key) ? base[key] : default(TValue); }
            set { base[key] = value; }
        }
    }

    private static T[] Init<T>(int size) where T : new()
    {
        var ret = new T[size]; for (int i = 0; i < size; i++) ret[i] = new T(); return ret;
    }

    #endregion Read / Write
}


#region Usings
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;

using static System.Math;
#endregion

// https://codeforces.com/problemset/problem/362/B
public class B___Petya_and_Staircases
{
    private static void Solve()
    {
        int n = ReadInt();
        int m = ReadInt();

        int[] A = ReadIntArray();
        A = A.OrderBy(x => x).ToArray();

        if (A[0] == 1 || A[m - 1] == m)
        {
            Write("NO");
            return;
        }

        for (int i = 2; i < m; i++)
        {
            if (A[i - 2] + 1 == A[i - 1] && A[i - 1] + 1 == A[i])
            {
                Write("NO");
                return;
            }
        }

        Write("YES");
    }

    #region Main

    private static TextReader reader;
    private static TextWriter writer;

    public static void Main()
    {
#if DEBUG

        //reader = new StreamReader("C:\\Users\\Axel\\Desktop\\input.txt");
        reader = new StreamReader(Console.OpenStandardInput());
        writer = Console.Out;

        //writer = new StreamWriter("..\\..\\output.txt");
#else
        reader = new StreamReader(Console.OpenStandardInput());
        writer = new StreamWriter(Console.OpenStandardOutput());

        //reader = new StreamReader("input.txt");
        //writer = new StreamWriter("output.txt");
#endif
        try
        {
            Solve();

            //var thread = new Thread(new String_Task().Solve, 1024 * 1024 * 128);
            //thread.Start();
            //thread.Join();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
#if DEBUG
#else
            throw;
#endif
        }
        reader.Close();
        writer.Close();
    }

    #endregion Main

    #region Read / Write

    private static Queue<string> currentLineTokens = new Queue<string>();

    private static string[] ReadAndSplitLine()
    {
        return reader.ReadLine().Split(new[] { ' ', '\t', }, StringSplitOptions.RemoveEmptyEntries);
    }

    public static string Read()
    {
        while (currentLineTokens.Count == 0) currentLineTokens = new Queue<string>(ReadAndSplitLine()); return currentLineTokens.Dequeue();
    }

    public static int ReadInt()
    {
        return int.Parse(Read());
    }

    public static long ReadLong()
    {
        return long.Parse(Read());
    }

    public static double ReadDouble()
    {
        return double.Parse(Read(), CultureInfo.InvariantCulture);
    }

    public static int[] ReadIntArray()
    {
        return ReadAndSplitLine().Select(int.Parse).ToArray();
    }

    public static long[] ReadLongArray()
    {
        return ReadAndSplitLine().Select(long.Parse).ToArray();
    }

    public static double[] ReadDoubleArray()
    {
        return ReadAndSplitLine().Select(s => double.Parse(s, CultureInfo.InvariantCulture)).ToArray();
    }

    public static int[][] ReadIntMatrix(int numberOfRows)
    {
        int[][] matrix = new int[numberOfRows][]; for (int i = 0; i < numberOfRows; i++) matrix[i] = ReadIntArray(); return matrix;
    }

    public static int[][] ReadAndTransposeIntMatrix(int numberOfRows)
    {
        int[][] matrix = ReadIntMatrix(numberOfRows); int[][] ret = new int[matrix[0].Length][];
        for (int i = 0; i < ret.Length; i++) { ret[i] = new int[numberOfRows]; for (int j = 0; j < numberOfRows; j++) ret[i][j] = matrix[j][i]; }
        return ret;
    }

    public static string[] ReadLines(int quantity)
    {
        string[] lines = new string[quantity]; for (int i = 0; i < quantity; i++) lines[i] = reader.ReadLine().Trim(); return lines;
    }

    public static void WriteArray<T>(IEnumerable<T> array)
    {
        writer.WriteLine(string.Join(" ", array));
    }

    public static void Write(params object[] array)
    {
        WriteArray(array);
    }

    public static void WriteLines<T>(IEnumerable<T> array)
    {
        foreach (var a in array) writer.WriteLine(a);
    }

    private class SDictionary<TKey, TValue> : Dictionary<TKey, TValue>
    {
        public new TValue this[TKey key]
        {
            get { return ContainsKey(key) ? base[key] : default(TValue); }
            set { base[key] = value; }
        }
    }

    private static T[] Init<T>(int size) where T : new()
    {
        var ret = new T[size]; for (int i = 0; i < size; i++) ret[i] = new T(); return ret;
    }

    #endregion Read / Write
}


#region Usings
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;

using static System.Math;
#endregion

// https://codeforces.com/problemset/problem/362/B
public class B___Petya_and_Staircases
{
    private static void Solve()
    {
        int n = ReadInt();
        int m = ReadInt();

        int[] A = ReadIntArray();
        A = A.OrderBy(x => x).ToArray();

        if (A[0] == 1 || A[m - 1] == n)
        {
            Write("NO");
            return;
        }

        for (int i = 2; i < m; i++)
        {
            if (A[i - 2] + 1 == A[i - 1] && A[i - 1] + 1 == A[i])
            {
                Write("NO");
                return;
            }
        }

        Write("YES");
    }

    #region Main

    private static TextReader reader;
    private static TextWriter writer;

    public static void Main()
    {
#if DEBUG

        //reader = new StreamReader("C:\\Users\\Axel\\Desktop\\input.txt");
        reader = new StreamReader(Console.OpenStandardInput());
        writer = Console.Out;

        //writer = new StreamWriter("..\\..\\output.txt");
#else
        reader = new StreamReader(Console.OpenStandardInput());
        writer = new StreamWriter(Console.OpenStandardOutput());

        //reader = new StreamReader("input.txt");
        //writer = new StreamWriter("output.txt");
#endif
        try
        {
            Solve();

            //var thread = new Thread(new String_Task().Solve, 1024 * 1024 * 128);
            //thread.Start();
            //thread.Join();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
#if DEBUG
#else
            throw;
#endif
        }
        reader.Close();
        writer.Close();
    }

    #endregion Main

    #region Read / Write

    private static Queue<string> currentLineTokens = new Queue<string>();

    private static string[] ReadAndSplitLine()
    {
        return reader.ReadLine().Split(new[] { ' ', '\t', }, StringSplitOptions.RemoveEmptyEntries);
    }

    public static string Read()
    {
        while (currentLineTokens.Count == 0) currentLineTokens = new Queue<string>(ReadAndSplitLine()); return currentLineTokens.Dequeue();
    }

    public static int ReadInt()
    {
        return int.Parse(Read());
    }

    public static long ReadLong()
    {
        return long.Parse(Read());
    }

    public static double ReadDouble()
    {
        return double.Parse(Read(), CultureInfo.InvariantCulture);
    }

    public static int[] ReadIntArray()
    {
        return ReadAndSplitLine().Select(int.Parse).ToArray();
    }

    public static long[] ReadLongArray()
    {
        return ReadAndSplitLine().Select(long.Parse).ToArray();
    }

    public static double[] ReadDoubleArray()
    {
        return ReadAndSplitLine().Select(s => double.Parse(s, CultureInfo.InvariantCulture)).ToArray();
    }

    public static int[][] ReadIntMatrix(int numberOfRows)
    {
        int[][] matrix = new int[numberOfRows][]; for (int i = 0; i < numberOfRows; i++) matrix[i] = ReadIntArray(); return matrix;
    }

    public static int[][] ReadAndTransposeIntMatrix(int numberOfRows)
    {
        int[][] matrix = ReadIntMatrix(numberOfRows); int[][] ret = new int[matrix[0].Length][];
        for (int i = 0; i < ret.Length; i++) { ret[i] = new int[numberOfRows]; for (int j = 0; j < numberOfRows; j++) ret[i][j] = matrix[j][i]; }
        return ret;
    }

    public static string[] ReadLines(int quantity)
    {
        string[] lines = new string[quantity]; for (int i = 0; i < quantity; i++) lines[i] = reader.ReadLine().Trim(); return lines;
    }

    public static void WriteArray<T>(IEnumerable<T> array)
    {
        writer.WriteLine(string.Join(" ", array));
    }

    public static void Write(params object[] array)
    {
        WriteArray(array);
    }

    public static void WriteLines<T>(IEnumerable<T> array)
    {
        foreach (var a in array) writer.WriteLine(a);
    }

    private class SDictionary<TKey, TValue> : Dictionary<TKey, TValue>
    {
        public new TValue this[TKey key]
        {
            get { return ContainsKey(key) ? base[key] : default(TValue); }
            set { base[key] = value; }
        }
    }

    private static T[] Init<T>(int size) where T : new()
    {
        var ret = new T[size]; for (int i = 0; i < size; i++) ret[i] = new T(); return ret;
    }

    #endregion Read / Write
}


use std::io;

#[allow(dead_code)]
fn solve() -> Vec<String> {
    let mut input = "".split_ascii_whitespace();
    let mut read = || loop {
        if let Some(word) = input.next() {
            break word;
        }
        input = {
            let mut input = "".to_owned();
            io::stdin().read_line(&mut input).unwrap();
            if input.is_empty() {
                panic!("reached EOF");
            }
            Box::leak(input.into_boxed_str()).split_ascii_whitespace()
        };
    };
    macro_rules! read(($ty:ty) => (read().parse::<$ty>().unwrap()));

    let mut rr = vec!["".to_string(); 0];

    let t = 1;
    for _ in 0..t {
        let _n = read!(usize);
        let m = read!(usize);
        let mut a = vec![0; m];
        for i in 0..m {
            a[i] = read!(usize);
        }

        a.sort();
        let mut ng = false;
        for i in 2..m {
            if a[i] - 2 == a[i - 2] {
                ng = true;
                break;
            }
        }

        rr.push(format!("{}", if ng { "NO" } else { "YES" }));
    }

    rr
}

#[allow(dead_code)]
fn main() {
    let output = solve();
    println!("{}", output.join("\n"));
}


use std::io;

#[allow(dead_code)]
fn solve() -> Vec<String> {
    let mut input = "".split_ascii_whitespace();
    let mut read = || loop {
        if let Some(word) = input.next() {
            break word;
        }
        input = {
            let mut input = "".to_owned();
            io::stdin().read_line(&mut input).unwrap();
            if input.is_empty() {
                panic!("reached EOF");
            }
            Box::leak(input.into_boxed_str()).split_ascii_whitespace()
        };
    };
    macro_rules! read(($ty:ty) => (read().parse::<$ty>().unwrap()));

    let mut rr = vec!["".to_string(); 0];

    let t = 1;
    for _ in 0..t {
        let n = read!(usize);
        let m = read!(usize);
        let mut a = vec![0; m];
        for i in 0..m {
            a[i] = read!(usize);
        }

        a.sort();
        let mut ng = m > 0 && (a[0] == 1 || a[m - 1] == n);
        for i in 2..m {
            if a[i] - 2 == a[i - 2] {
                ng = true;
                break;
            }
        }

        rr.push(format!("{}", if ng { "NO" } else { "YES" }));
    }

    rr
}

#[allow(dead_code)]
fn main() {
    let output = solve();
    println!("{}", output.join("\n"));
}


use std::io;

#[allow(dead_code)]
fn solve() -> Vec<String> {
    let mut input = "".split_ascii_whitespace();
    let mut read = || loop {
        if let Some(word) = input.next() {
            break word;
        }
        input = {
            let mut input = "".to_owned();
            io::stdin().read_line(&mut input).unwrap();
            if input.is_empty() {
                panic!("reached EOF");
            }
            Box::leak(input.into_boxed_str()).split_ascii_whitespace()
        };
    };
    macro_rules! read(($ty:ty) => (read().parse::<$ty>().unwrap()));

    let mut rr = vec!["".to_string(); 0];

    let t = 1;
    for _ in 0..t {
        let n = read!(usize);
        let m = read!(usize);
        let mut a = vec![0; m];
        for i in 0..m {
            a[i] = read!(usize);
        }

        a.sort();
        let mut ng = a[0] == 1 || a[m - 1] == n;
        for i in 2..m {
            if a[i] - 2 == a[i - 2] {
                ng = true;
                break;
            }
        }

        rr.push(format!("{}", if ng { "NO" } else { "YES" }));
    }

    rr
}

#[allow(dead_code)]
fn main() {
    let output = solve();
    println!("{}", output.join("\n"));
}


package main
import (
	"fmt"
	"sort"
	//"unicode/utf8"
)
func main() {
	var n,m int
	flag:= false
	fmt.Scan(&n,&m)
	a:=make([]int,m+1)
	if m>0 {
	for i:=1;i<=m;i++ {
		fmt.Scan(&a[i])
	}
	sort.Ints(a)
	//for i:=0;i<=m;i++ {
		//fmt.Println(a[i])
	//}
	if a[1]==1 || a[m]==n {
		flag=true
	}
	for i:=1;i+2<=m;i++ {
		if a[i]==a[i+1]-1 && a[i]==(a[i+2]-2) {
			flag=true
		}
	}
	}
	if flag == true {
		fmt.Println("NO")
	} else {
		fmt.Println("YES")
	}
}


package main
import (
	"fmt"
	"sort"
	//"unicode/utf8"
)
func main() {
	var n,m int
	flag:= false
	fmt.Scan(&n,&m)
	a:=make([]int,m+1)
	for i:=1;i<=m;i++ {
		fmt.Scan(&a[i])
	}
	sort.Ints(a)
	//for i:=0;i<=m;i++ {
		//fmt.Println(a[i])
	//}
	if a[1]==1 || a[m]==n {
		flag=true
	}
	for i:=1;i+2<=m;i++ {
		if a[i]==a[i+1]-1 && a[i]==(a[i+2]-2) {
			flag=true
		}
	}

	if flag == true {
		fmt.Println("NO")
	} else {
		fmt.Println("YES")
	}
}


package main

import (
    "fmt"
    "sort"
)

func main() {
    var n,m int
    fmt.Scan(&n,&m)
    a := make([]int,m)
    for i := 0; i < m; i++ { fmt.Scan(&a[i]) }
    sort.Ints(a)
    ans := true
    if (a[0] == 1) || (a[m-1] == n) {
        ans = false
    } else {
        for i := 2; i < m; i++ {
            if a[i]-2 == a[i-2] {
                ans = false
                break
            }
        }
    }
    if ans { fmt.Println("YES") } else { fmt.Println("NO") }
}


package main

import (
    "fmt"
    "sort"
)

func main() {
    var n,m int
    fmt.Scan(&n,&m)
    a := make([]int,m)
    for i := 0; i < m; i++ { fmt.Scan(&a[i]) }
    sort.Ints(a)
    ans := true
    if m == 0 {
        ans = true
    } else if (a[0] == 1) || (a[m-1] == n) {
        ans = false
    } else {
        for i := 2; i < m; i++ {
            if a[i]-2 == a[i-2] {
                ans = false
                break
            }
        }
    }
    if ans { fmt.Println("YES") } else { fmt.Println("NO") }
}


package main

import (
	"fmt"
	"sort"
)

func main() {
	var n, m int

	fmt.Scan(&n, &m)

	arr := make([]int, m)
	for i:=0; i<m; i++ {
		fmt.Scan(&arr[i])
	}

	sort.Ints(arr)

	run := 1
	maxrun := 1
	for i:=1; i<m; i++ {
		if arr[i] == arr[i-1]+1 {
			run++
		} else {
			if run > maxrun {
				maxrun = run
			}
			run = 1
		}
	}

	if run > maxrun {
		maxrun = run
	}

	if maxrun > 2 || (m >= 1 && (arr[len(arr)-1] == n || arr[0] == 1)) {
		fmt.Println("NO")
	} else {
		fmt.Println("YES")
	}
}


package main

import (
	"fmt"
	"sort"
)

func main() {
	var n, m int

	fmt.Scan(&n, &m)

	arr := make([]int, m)
	for i:=0; i<m; i++ {
		fmt.Scan(&arr[i])
	}

	sort.Ints(arr)

	run := 1
	maxrun := 1
	for i:=1; i<m; i++ {
		if arr[i] == arr[i-1]+1 {
			run++
		} else {
			if run > maxrun {
				maxrun = run
			}
			run = 1
		}
	}

	if run > maxrun {
		maxrun = run
	}

	if maxrun > 2 || (m > 1 && arr[len(arr)-1] == m) {
		fmt.Println("NO")
	} else {
		fmt.Println("YES")
	}
}


package main

import (
	"fmt"
	"sort"
)

func main() {
	var n, m int

	fmt.Scan(&n, &m)

	arr := make([]int, m)
	for i:=0; i<m; i++ {
		fmt.Scan(&arr[i])
	}

	sort.Ints(arr)

	run := 1
	maxrun := 1
	for i:=1; i<m; i++ {
		if arr[i] == arr[i-1]+1 {
			run++
		} else {
			if run > maxrun {
				maxrun = run
			}
			run = 1
		}
	}

	if run > maxrun {
		maxrun = run
	}

	if maxrun > 2 || (m >= 1 && arr[len(arr)-1] == n) {
		fmt.Println("NO")
	} else {
		fmt.Println("YES")
	}
}


package main

import (
	"fmt"
	"sort"
)

func main() {
	var n, m int

	fmt.Scan(&n, &m)

	arr := make([]int, m)
	for i:=0; i<m; i++ {
		fmt.Scan(&arr[i])
	}

	sort.Ints(arr)

	run := 1
	maxrun := 1
	for i:=1; i<m; i++ {
		if arr[i] == arr[i-1]+1 {
			run++
		} else {
			if run > maxrun {
				maxrun = run
			}
			run = 1
		}
	}

	if run > maxrun {
		maxrun = run
	}

	if maxrun > 2 || (m > 1 && arr[len(arr)-1] == n) {
		fmt.Println("NO")
	} else {
		fmt.Println("YES")
	}
}


package main

import (
	"bufio"
	"io"
	"os"
	"sort"
	"strconv"
)

type Scanner struct {
	r            io.Reader
	split        bufio.SplitFunc
	maxTokenSize int
	token, buf   []byte
	start, end   int
}

func NewScanner(r io.Reader) *Scanner {
	return &Scanner{
		r:            r,
		split:        bufio.ScanWords,
		maxTokenSize: 16777216,
		buf:          make([]byte, 4096),
	}
}

func (s *Scanner) advance(n int) bool {
	if n < 0 || n > s.end-s.start {
		return false
	}
	s.start += n
	return true
}

func (s *Scanner) Text() string {
	return string(s.token)
}

func (s *Scanner) Scan() bool {
	for {
		if s.end > s.start {
			advance, token, err := s.split(s.buf[s.start:s.end], false)
			if err != nil || !s.advance(advance) {
				return false
			}
			s.token = token
			if token != nil {
				return true
			}
		}
		if s.start > 0 && (s.end == len(s.buf) || s.start > len(s.buf)/2) {
			copy(s.buf, s.buf[s.start:s.end])
			s.end -= s.start
			s.start = 0
		}
		if s.end == len(s.buf) {
			if len(s.buf) >= s.maxTokenSize {
				return false
			}
			newSize := len(s.buf) * 2
			if newSize > s.maxTokenSize {
				newSize = s.maxTokenSize
			}
			newBuf := make([]byte, newSize)
			copy(newBuf, s.buf[s.start:s.end])
			s.buf = newBuf
			s.end -= s.start
			s.start = 0
			continue
		}
		for loop := 0; ; {
			n, _ := s.r.Read(s.buf[s.end:len(s.buf)])
			s.end += n
			if n > 0 {
				break
			}
			loop++
			if loop > 100 {
				break
			}
		}
	}
}

func (s *Scanner) Split(split bufio.SplitFunc) {
	s.split = split
}

var w *bufio.Writer = bufio.NewWriter(os.Stdout)
var sc *Scanner = NewScanner(os.Stdin)

func next() string { sc.Scan(); return sc.Text() }

func ni32() int {
	sc.Scan()
	n, _ := strconv.Atoi(sc.Text())
	return n
}

func ni64() int64 {
	sc.Scan()
	n, _ := strconv.ParseInt(sc.Text(), 10, 64)
	return n
}

func pri32(i ...int) {
	for _, ii := range i {
		w.WriteString(strconv.Itoa(ii))
		sp()
	}
}
func pri64(i ...int64) {
	for _, ii := range i {
		w.WriteString(strconv.FormatInt(ii, 10))
		sp()
	}
}
func sp()   { w.WriteByte(' ') }
func endl() { w.WriteByte('\n') }

func min(i, j int) int {
	if i < j {
		return i
	}
	return j
}

func max(i, j int64) int64 {
	if i > j {
		return i
	}
	return j
}

func main() {
	defer w.Flush()
	n, m := ni32(), ni32()
	d := make([]int, m)
	for i := 0; i < m; i++ {
		d[i] = ni32()
	}
	sort.Ints(d)
	if d[0] == 1 || d[m-1] == n {
		w.WriteString("NO\n")
		return
	}
	for i := 2; i < m; i++ {
		if d[i] == d[i-2]+2 {
			w.WriteString("NO\n")
			return
		}
	}
	w.WriteString("YES\n")
}


package main

import (
	"bufio"
	"io"
	"os"
	"sort"
	"strconv"
)

type Scanner struct {
	r            io.Reader
	split        bufio.SplitFunc
	maxTokenSize int
	token, buf   []byte
	start, end   int
}

func NewScanner(r io.Reader) *Scanner {
	return &Scanner{
		r:            r,
		split:        bufio.ScanWords,
		maxTokenSize: 16777216,
		buf:          make([]byte, 4096),
	}
}

func (s *Scanner) advance(n int) bool {
	if n < 0 || n > s.end-s.start {
		return false
	}
	s.start += n
	return true
}

func (s *Scanner) Text() string {
	return string(s.token)
}

func (s *Scanner) Scan() bool {
	for {
		if s.end > s.start {
			advance, token, err := s.split(s.buf[s.start:s.end], false)
			if err != nil || !s.advance(advance) {
				return false
			}
			s.token = token
			if token != nil {
				return true
			}
		}
		if s.start > 0 && (s.end == len(s.buf) || s.start > len(s.buf)/2) {
			copy(s.buf, s.buf[s.start:s.end])
			s.end -= s.start
			s.start = 0
		}
		if s.end == len(s.buf) {
			if len(s.buf) >= s.maxTokenSize {
				return false
			}
			newSize := len(s.buf) * 2
			if newSize > s.maxTokenSize {
				newSize = s.maxTokenSize
			}
			newBuf := make([]byte, newSize)
			copy(newBuf, s.buf[s.start:s.end])
			s.buf = newBuf
			s.end -= s.start
			s.start = 0
			continue
		}
		for loop := 0; ; {
			n, _ := s.r.Read(s.buf[s.end:len(s.buf)])
			s.end += n
			if n > 0 {
				break
			}
			loop++
			if loop > 100 {
				break
			}
		}
	}
}

func (s *Scanner) Split(split bufio.SplitFunc) {
	s.split = split
}

var w *bufio.Writer = bufio.NewWriter(os.Stdout)
var sc *Scanner = NewScanner(os.Stdin)

func next() string { sc.Scan(); return sc.Text() }

func ni32() int {
	sc.Scan()
	n, _ := strconv.Atoi(sc.Text())
	return n
}

func ni64() int64 {
	sc.Scan()
	n, _ := strconv.ParseInt(sc.Text(), 10, 64)
	return n
}

func pri32(i ...int) {
	for _, ii := range i {
		w.WriteString(strconv.Itoa(ii))
		sp()
	}
}
func pri64(i ...int64) {
	for _, ii := range i {
		w.WriteString(strconv.FormatInt(ii, 10))
		sp()
	}
}
func sp()   { w.WriteByte(' ') }
func endl() { w.WriteByte('\n') }

func min(i, j int) int {
	if i < j {
		return i
	}
	return j
}

func max(i, j int64) int64 {
	if i > j {
		return i
	}
	return j
}

func main() {
	defer w.Flush()
	n, m := ni32(), ni32()
	if m == 0 {
		w.WriteString("YES\n")
		return
	}
	d := make([]int, m)
	for i := 0; i < m; i++ {
		d[i] = ni32()
	}
	sort.Ints(d)
	if d[0] == 1 || d[m-1] == n {
		w.WriteString("NO\n")
		return
	}
	for i := 2; i < m; i++ {
		if d[i] == d[i-2]+2 {
			w.WriteString("NO\n")
			return
		}
	}
	w.WriteString("YES\n")
}


// 362B-mic
package main

import (
    "fmt"
    "sort"
)

func main() {
    var n, k int
    fmt.Scan(&n, &k)
    a := make([]int, k)
    b := true
    for i := 0; i < k; i++ {
        fmt.Scan(&a[i])
    }
    sort.Sort(sort.IntSlice(a))
    if k != 0 && (a[0] == 1 || a[k-1] == n) {
        b = false
    }
    for i := 2; i < k; i++ {
        if a[i-1] == a[i]-1 && a[i-2] == a[i-1]-1 {
            b = false
        }
    }
    if b {
        fmt.Println("YES")
    } else {
        fmt.Println("NO")
    }

}


package main

import "fmt"

func main() {
    var i, j, n, m int
    fmt.Scanf("%d %d", &m, &n)
    p := make(map[int]bool)
    for n > 0 {
        n--
        fmt.Scanf("&d", &i)
        p[i] = 1
    }
    if p[1] || p[m] {
        fmt.Print("NO")
        return
    }
    for i, _ := range p {
        if p[i+1] && p[i+2] {
            fmt.Print("NO")
            return
        }
    }
    fmt.Print("YES")
}


package main

import "fmt"

func main() {
    var i,  n, m int
    fmt.Scanf("%d %d", &m, &n)
    p := make(map[int]bool)
    for n > 0 {
        n--
        fmt.Scanf("&d", &i)
        p[i] = true
    }
    if p[1] || p[m] {
        fmt.Print("NO")
        return
    }
    for i, _ := range p {
        if p[i+1] && p[i+2] {
            fmt.Print("NO")
            return
        }
    }
    fmt.Print("YES")
}


package main

import "fmt"

func main() {
	var i,  n, m int
	fmt.Scan(&m, &n)
	p := make(map[int]bool)
	for n > 0 {
		n--
		fmt.Scan(&i)
		p[i] = true
	}
	if p[1] || p[m] {
		fmt.Print("NO")
		return
	}
	for i, _ := range p {
		if p[i+1] && p[i+2] {
			fmt.Print("NO")
			return
		}
	}
	fmt.Print("YES")
}


package main

import "fmt"

func main() {
    var i, j, n, m int
    fmt.Scanf("%d %d", &m, &n)
    p := make(map[int]bool)
    for n > 0 {
        n--
        fmt.Scanf("&d", &i)
        p[i] = true
    }
    if p[1] || p[m] {
        fmt.Print("NO")
        return
    }
    for i, _ := range p {
        if p[i+1] && p[i+2] {
            fmt.Print("NO")
            return
        }
    }
    fmt.Print("YES")
}


<?php
error_reporting("off");
//362B: Petya and Staircases
list($n, $m) = explode(" ", trim(fgets(STDIN))); //$n = 123; $m = 13;
$dirtystairs = explode(" ", trim(fgets(STDIN))); //$dirtystairs = explode(" ", "36 73 111 2 92 5 47 55 48 113 7 78 37");
sort($dirtystairs, SORT_NUMERIC);
$numdirty = count($dirtystairs);
$counter = 0;
$first = "yes";

for ($i = 0; $i < $numdirty; $i++) {
    if ($dirtystairs[$i] == $dirtystairs[$i - 1] + 1 && $first == "yes") { //this statement probably needs improving
        $first = "no";
        $counter++;
        if ($counter == 3) {
            $thereAreThreeConsecutiveDirtyStairs = "yep";
            break;
        }
    } else {
        $first = "yes";
        $counter = 0; //reset if it wasn't 0 already
    }
}

if (in_array($n, $dirtystairs)) {
    echo "NO";
} elseif ($thereAreThreeConsecutiveDirtyStairs == "yep") {
    echo "NO";
} else {
    echo "YES";
}
?>


<?php
error_reporting("off");
//362B: Petya and Staircases
list($n, $m) = explode(" ", trim(fgets(STDIN))); //$n = 10; $m = 3;
$dirtystairs = explode(" ", trim(fgets(STDIN))); //$dirtystairs = explode(" ", "7 8 10");
sort($dirtystairs, SORT_NUMERIC);
$numdirty = count($dirtystairs);
$counter = 1;

for ($i = 0; $i < $numdirty; $i++) {
    if ($dirtystairs[$i] == $dirtystairs[$i - 1] + 1) {
        $counter++;
        if ($counter == 3) {
            $thereAreThreeConsecutiveDirtyStairs = "yep";
            break;
        }
    } else {
        $first = "yes";
        $counter = 1; //reset if it wasn't 1 already
    }
}

if (in_array($n, $dirtystairs) || in_array(1, $dirtystairs)) {
    echo "NO";
} elseif ($thereAreThreeConsecutiveDirtyStairs == "yep") {
    echo "NO";
} else {
    echo "YES";
}
?>


<?php
error_reporting("off");
//362B: Petya and Staircases
list($n, $m) = explode(" ", trim(fgets(STDIN))); //$n = 10; $m = 3;
$dirtystairs = explode(" ", trim(fgets(STDIN))); //$dirtystairs = explode(" ", "7 8 10");
sort($dirtystairs, SORT_NUMERIC);
$numdirty = count($dirtystairs);
$counter = 1;

for ($i = 0; $i < $numdirty; $i++) {
    if ($dirtystairs[$i] == $dirtystairs[$i - 1] + 1) {
        $counter++;
        if ($counter == 3) {
            $thereAreThreeConsecutiveDirtyStairs = "yep";
            break;
        }
    } else {
        $first = "yes";
        $counter = 1; //reset if it wasn't 1 already
    }
}

if (in_array($n, $dirtystairs)) {
    echo "NO";
} elseif ($thereAreThreeConsecutiveDirtyStairs == "yep") {
    echo "NO";
} else {
    echo "YES";
}
?>


<?php
error_reporting("off");
//362B: Petya and Staircases
list($n, $m) = explode(" ", trim(fgets(STDIN))); //$n = 10; $m = 3;
$dirtystairs = explode(" ", trim(fgets(STDIN))); //$dirtystairs = explode(" ", "7 8 10");
sort($dirtystairs);
$numdirty = count($dirtystairs);
$counter = 0;

for ($i = 0; $i < $numdirty; $i++) {
    if ($dirtystairs[$i] == $dirtystairs[$i - 1] + 1 || $dirtystairs[$i] == $dirtystairs[$i + 1] - 1) { //this statement probably needs improving
        $counter++;
        if ($counter == 3) {
            $thereAreThreeConsecutiveDirtyStairs = "yep";
            break;
        }
    } else {
        $counter = 0; //reset if it wasn't 0 already
    }
}

if (in_array($n, $dirtystairs)) {
    echo "NO";
} elseif ($thereAreThreeConsecutiveDirtyStairs == "yep") {
    echo "NO";
} else {
    echo "YES";
}
?>


<?php
error_reporting("off");
//362B: Petya and Staircases
list($n, $m) = explode(" ", trim(fgets(STDIN))); //$n = 123; $m = 13;
$dirtystairs = explode(" ", trim(fgets(STDIN))); //$dirtystairs = explode(" ", "36 73 111 2 92 5 47 55 48 113 7 78 37");
sort($dirtystairs, SORT_NUMERIC);
print_r($dirtystairs);
$numdirty = count($dirtystairs);
$counter = 0;

for ($i = 0; $i < $numdirty; $i++) {
    if ($dirtystairs[$i] == $dirtystairs[$i - 1] + 1 || $dirtystairs[$i] == $dirtystairs[$i + 1] - 1) { //this statement probably needs improving
        $counter++;
        if ($counter == 3) {
            $thereAreThreeConsecutiveDirtyStairs = "yep";
            break;
        }
    } else {
        $counter = 0; //reset if it wasn't 0 already
    }
}

if (in_array($n, $dirtystairs)) {
    echo "NO";
} elseif ($thereAreThreeConsecutiveDirtyStairs == "yep") {
    echo "NO";
} else {
    echo "YES";
}
?>


<?php
error_reporting("off");
//362B: Petya and Staircases
list($n, $m) = explode(" ", trim(fgets(STDIN))); //$n = 123; $m = 13;
$dirtystairs = explode(" ", trim(fgets(STDIN))); //$dirtystairs = explode(" ", "36 73 111 2 92 5 47 55 48 113 7 78 37");
sort($dirtystairs, SORT_NUMERIC);
$numdirty = count($dirtystairs);
$counter = 0;

for ($i = 0; $i < $numdirty; $i++) {
    if ($dirtystairs[$i] == $dirtystairs[$i - 1] + 1 || $dirtystairs[$i] == $dirtystairs[$i + 1] - 1) { //this statement probably needs improving
        $counter++;
        if ($counter == 3) {
            $thereAreThreeConsecutiveDirtyStairs = "yep";
            break;
        }
    } else {
        $counter = 0; //reset if it wasn't 0 already
    }
}

if (in_array($n, $dirtystairs)) {
    echo "NO";
} elseif ($thereAreThreeConsecutiveDirtyStairs == "yep") {
    echo "NO";
} else {
    echo "YES";
}
?>


import sys
from collections import defaultdict, Counter
from itertools import permutations, combinations
from math import sin, cos, asin, acos, tan, atan, pi

sys.setrecursionlimit(10 ** 6)

def pyes_no(condition, yes = "YES", no = "NO", none = "-1") :
  if condition == None:
    print (none)
  elif condition :
    print (yes)
  else :
    print (no)

def plist(a, s = ' ') :
  print (s.join(map(str, a)))

def rint() :
  return int(sys.stdin.readline())

def rstr() :
  return sys.stdin.readline().strip()

def rints() :
  return map(int, sys.stdin.readline().split())

def rfield(n, m = None) :
  if m == None :
    m = n

  field = []
  for i in xrange(n) :
    chars = sys.stdin.readline().strip()
    assert(len(chars) == m)
    field.append(chars)
  return field

def pfield(field, separator = '') :
  print ('\n'.join(map(lambda x: separator.join(x), field)))

def check_field_equal(field, i, j, value) :
  if i >= 0 and i < len(field) and j >= 0 and j < len(field[i]) :
    return value == field[i][j]
  return None

def digits(x, p) :
  digits = []
  while x > 0 :
    digits.append(x % p)
    x //= p
  return digits[::-1]

def undigits(x, p) :
  value = 0
  for d in x :
    value *= p
    value += d
  return value

def modpower(a, n, mod) :
  r = a ** (n % 2)
  if n > 1 :
    r *= modpower(a, n // 2, mod) ** 2
  return r % mod

def gcd(a, b) :
  if a > b :
    a, b = b, a

  while a > 0 :
    a, b = b % a, a

  return b

def vector_distance(a, b) :
  diff = vector_diff(a, b)

  return scalar_product(diff, diff) ** 0.5

def vector_inverse(v) :
  r = [-x for x in v]

  return tuple(r)

def vector_diff(a, b) :
  return vector_sum(a, vector_inverse(b))

def vector_sum(a, b) :
  r = [c1 + c2 for c1, c2 in zip(a, b)]

  return tuple(r)

def scalar_product(a, b) :
  r = 0
  for c1, c2 in zip(a, b) :
    r += c1 * c2

  return r

def check_rectangle(points) :
  assert(len(points) == 4)

  A, B, C, D = points

  for A1, A2, A3, A4 in [
    (A, B, C, D),
    (A, C, B, D),
    (A, B, D, C),
    (A, C, D, B),
    (A, D, B, C),
    (A, D, C, B),
  ] :
    sides = (
      vector_diff(A1, A2),
      vector_diff(A2, A3),
      vector_diff(A3, A4),
      vector_diff(A4, A1),
    )
    if all(scalar_product(s1, s2) == 0 for s1, s2 in zip(sides, sides[1:])) :
       return True
  return False

def check_square(points) :
  if not check_rectangle(points) :
    return False
  A, B, C, D = points

  for A1, A2, A3, A4 in [
    (A, B, C, D),
    (A, C, B, D),
    (A, B, D, C),
    (A, C, D, B),
    (A, D, B, C),
    (A, D, C, B),
  ] :
    side_lengths = [
      (first[0] - next[0]) ** 2 + (first[1] - next[1]) ** 2 for first, next in zip([A1, A2, A3, A4], [A2, A3, A4, A1])
    ]
    if len(set(side_lengths)) == 1 :
      return True

  return False

def check_right(p) :
  # Check if there are same points
  for a, b in [
    (p[0], p[1]),
    (p[0], p[2]),
    (p[1], p[2]),
  ] :
    if a[0] == b[0] and a[1] == b[1] :
      return False

  a, b, c = p
  a, b, c = vector_diff(a, b), vector_diff(b, c), vector_diff(c, a)

  return scalar_product(a, b) * scalar_product(a, c) * scalar_product(b, c) == 0

def modmatrixproduct(a, b, mod) :
  n, m1 = len(a), len(a[0])
  m2, k = len(b), len(b[0])

  assert(m1 == m2)
  m = m1

  r = [[0] * k for i in range(n)]
  for i in range(n) :
    for j in range(k) :
      for l in range(m) :
        r[i][j] += a[i][l] * b[l][j]
      r[i][j] %= mod
  return r

def modmatrixpower(a, n, mod) :
  magic = 2
  for m in [2, 3, 5, 7] :
    if n % m == 0 :
      magic = m
      break

  r = None
  if n < magic :
    r = a
    n -= 1
  else :
    s = modmatrixpower(a, n // magic, mod)
    r = s
    for i in range(magic - 1) :
      r = modmatrixproduct(r, s, mod)

  for i in range(n % magic) :
    r = modmatrixproduct(r, a, mod)

  return r

n, _ = rints()
m = rints()
m.sort()
if m[0] == 1 or m[-1] == n :
  print "NO"
else :
  for a, b in zip(m, m[2:]) :
    if b - a == 2 :
      print "NO"
      exit(0)
print "YES"


import sys
from collections import defaultdict, Counter
from itertools import permutations, combinations
from math import sin, cos, asin, acos, tan, atan, pi

sys.setrecursionlimit(10 ** 6)

def pyes_no(condition, yes = "YES", no = "NO", none = "-1") :
  if condition == None:
    print (none)
  elif condition :
    print (yes)
  else :
    print (no)

def plist(a, s = ' ') :
  print (s.join(map(str, a)))

def rint() :
  return int(sys.stdin.readline())

def rstr() :
  return sys.stdin.readline().strip()

def rints() :
  return map(int, sys.stdin.readline().split())

def rfield(n, m = None) :
  if m == None :
    m = n

  field = []
  for i in xrange(n) :
    chars = sys.stdin.readline().strip()
    assert(len(chars) == m)
    field.append(chars)
  return field

def pfield(field, separator = '') :
  print ('\n'.join(map(lambda x: separator.join(x), field)))

def check_field_equal(field, i, j, value) :
  if i >= 0 and i < len(field) and j >= 0 and j < len(field[i]) :
    return value == field[i][j]
  return None

def digits(x, p) :
  digits = []
  while x > 0 :
    digits.append(x % p)
    x //= p
  return digits[::-1]

def undigits(x, p) :
  value = 0
  for d in x :
    value *= p
    value += d
  return value

def modpower(a, n, mod) :
  r = a ** (n % 2)
  if n > 1 :
    r *= modpower(a, n // 2, mod) ** 2
  return r % mod

def gcd(a, b) :
  if a > b :
    a, b = b, a

  while a > 0 :
    a, b = b % a, a

  return b

def vector_distance(a, b) :
  diff = vector_diff(a, b)

  return scalar_product(diff, diff) ** 0.5

def vector_inverse(v) :
  r = [-x for x in v]

  return tuple(r)

def vector_diff(a, b) :
  return vector_sum(a, vector_inverse(b))

def vector_sum(a, b) :
  r = [c1 + c2 for c1, c2 in zip(a, b)]

  return tuple(r)

def scalar_product(a, b) :
  r = 0
  for c1, c2 in zip(a, b) :
    r += c1 * c2

  return r

def check_rectangle(points) :
  assert(len(points) == 4)

  A, B, C, D = points

  for A1, A2, A3, A4 in [
    (A, B, C, D),
    (A, C, B, D),
    (A, B, D, C),
    (A, C, D, B),
    (A, D, B, C),
    (A, D, C, B),
  ] :
    sides = (
      vector_diff(A1, A2),
      vector_diff(A2, A3),
      vector_diff(A3, A4),
      vector_diff(A4, A1),
    )
    if all(scalar_product(s1, s2) == 0 for s1, s2 in zip(sides, sides[1:])) :
       return True
  return False

def check_square(points) :
  if not check_rectangle(points) :
    return False
  A, B, C, D = points

  for A1, A2, A3, A4 in [
    (A, B, C, D),
    (A, C, B, D),
    (A, B, D, C),
    (A, C, D, B),
    (A, D, B, C),
    (A, D, C, B),
  ] :
    side_lengths = [
      (first[0] - next[0]) ** 2 + (first[1] - next[1]) ** 2 for first, next in zip([A1, A2, A3, A4], [A2, A3, A4, A1])
    ]
    if len(set(side_lengths)) == 1 :
      return True

  return False

def check_right(p) :
  # Check if there are same points
  for a, b in [
    (p[0], p[1]),
    (p[0], p[2]),
    (p[1], p[2]),
  ] :
    if a[0] == b[0] and a[1] == b[1] :
      return False

  a, b, c = p
  a, b, c = vector_diff(a, b), vector_diff(b, c), vector_diff(c, a)

  return scalar_product(a, b) * scalar_product(a, c) * scalar_product(b, c) == 0

def modmatrixproduct(a, b, mod) :
  n, m1 = len(a), len(a[0])
  m2, k = len(b), len(b[0])

  assert(m1 == m2)
  m = m1

  r = [[0] * k for i in range(n)]
  for i in range(n) :
    for j in range(k) :
      for l in range(m) :
        r[i][j] += a[i][l] * b[l][j]
      r[i][j] %= mod
  return r

def modmatrixpower(a, n, mod) :
  magic = 2
  for m in [2, 3, 5, 7] :
    if n % m == 0 :
      magic = m
      break

  r = None
  if n < magic :
    r = a
    n -= 1
  else :
    s = modmatrixpower(a, n // magic, mod)
    r = s
    for i in range(magic - 1) :
      r = modmatrixproduct(r, s, mod)

  for i in range(n % magic) :
    r = modmatrixproduct(r, a, mod)

  return r

n, m = rints()
if not m :
  print "YES"
  exit(0)

m = rints()
m.sort()
if m[0] == 1 or m[-1] == n :
  print "NO"
else :
  for a, b in zip(m, m[2:]) :
    if b - a == 2 :
      print "NO"
      exit(0)
  print "YES"


import sys
from collections import defaultdict, Counter
from itertools import permutations, combinations
from math import sin, cos, asin, acos, tan, atan, pi

sys.setrecursionlimit(10 ** 6)

def pyes_no(condition, yes = "YES", no = "NO", none = "-1") :
  if condition == None:
    print (none)
  elif condition :
    print (yes)
  else :
    print (no)

def plist(a, s = ' ') :
  print (s.join(map(str, a)))

def rint() :
  return int(sys.stdin.readline())

def rstr() :
  return sys.stdin.readline().strip()

def rints() :
  return map(int, sys.stdin.readline().split())

def rfield(n, m = None) :
  if m == None :
    m = n

  field = []
  for i in xrange(n) :
    chars = sys.stdin.readline().strip()
    assert(len(chars) == m)
    field.append(chars)
  return field

def pfield(field, separator = '') :
  print ('\n'.join(map(lambda x: separator.join(x), field)))

def check_field_equal(field, i, j, value) :
  if i >= 0 and i < len(field) and j >= 0 and j < len(field[i]) :
    return value == field[i][j]
  return None

def digits(x, p) :
  digits = []
  while x > 0 :
    digits.append(x % p)
    x //= p
  return digits[::-1]

def undigits(x, p) :
  value = 0
  for d in x :
    value *= p
    value += d
  return value

def modpower(a, n, mod) :
  r = a ** (n % 2)
  if n > 1 :
    r *= modpower(a, n // 2, mod) ** 2
  return r % mod

def gcd(a, b) :
  if a > b :
    a, b = b, a

  while a > 0 :
    a, b = b % a, a

  return b

def vector_distance(a, b) :
  diff = vector_diff(a, b)

  return scalar_product(diff, diff) ** 0.5

def vector_inverse(v) :
  r = [-x for x in v]

  return tuple(r)

def vector_diff(a, b) :
  return vector_sum(a, vector_inverse(b))

def vector_sum(a, b) :
  r = [c1 + c2 for c1, c2 in zip(a, b)]

  return tuple(r)

def scalar_product(a, b) :
  r = 0
  for c1, c2 in zip(a, b) :
    r += c1 * c2

  return r

def check_rectangle(points) :
  assert(len(points) == 4)

  A, B, C, D = points

  for A1, A2, A3, A4 in [
    (A, B, C, D),
    (A, C, B, D),
    (A, B, D, C),
    (A, C, D, B),
    (A, D, B, C),
    (A, D, C, B),
  ] :
    sides = (
      vector_diff(A1, A2),
      vector_diff(A2, A3),
      vector_diff(A3, A4),
      vector_diff(A4, A1),
    )
    if all(scalar_product(s1, s2) == 0 for s1, s2 in zip(sides, sides[1:])) :
       return True
  return False

def check_square(points) :
  if not check_rectangle(points) :
    return False
  A, B, C, D = points

  for A1, A2, A3, A4 in [
    (A, B, C, D),
    (A, C, B, D),
    (A, B, D, C),
    (A, C, D, B),
    (A, D, B, C),
    (A, D, C, B),
  ] :
    side_lengths = [
      (first[0] - next[0]) ** 2 + (first[1] - next[1]) ** 2 for first, next in zip([A1, A2, A3, A4], [A2, A3, A4, A1])
    ]
    if len(set(side_lengths)) == 1 :
      return True

  return False

def check_right(p) :
  # Check if there are same points
  for a, b in [
    (p[0], p[1]),
    (p[0], p[2]),
    (p[1], p[2]),
  ] :
    if a[0] == b[0] and a[1] == b[1] :
      return False

  a, b, c = p
  a, b, c = vector_diff(a, b), vector_diff(b, c), vector_diff(c, a)

  return scalar_product(a, b) * scalar_product(a, c) * scalar_product(b, c) == 0

def modmatrixproduct(a, b, mod) :
  n, m1 = len(a), len(a[0])
  m2, k = len(b), len(b[0])

  assert(m1 == m2)
  m = m1

  r = [[0] * k for i in range(n)]
  for i in range(n) :
    for j in range(k) :
      for l in range(m) :
        r[i][j] += a[i][l] * b[l][j]
      r[i][j] %= mod
  return r

def modmatrixpower(a, n, mod) :
  magic = 2
  for m in [2, 3, 5, 7] :
    if n % m == 0 :
      magic = m
      break

  r = None
  if n < magic :
    r = a
    n -= 1
  else :
    s = modmatrixpower(a, n // magic, mod)
    r = s
    for i in range(magic - 1) :
      r = modmatrixproduct(r, s, mod)

  for i in range(n % magic) :
    r = modmatrixproduct(r, a, mod)

  return r

n, _ = rints()
m = rints()
m.sort()
if m[0] == 1 or m[-1] == n :
  print "NO"
else :
  for a, b in zip(m, m[2:]) :
    if b - a == 2 :
      print "NO"
      exit(0)
  print "YES"


#include <stdio.h>
#define rep(i,a,b) for (int i=a; i<b; i++)
typedef long long ll;
int main() {
    int queries; scanf("%d\n",&queries);
    long len;
    ll a,b,c,curr;
    rep (i,0,queries) {
        scanf("%ld\n%I64d %I64d",&len,&a,&b);
        for (long j=2; j<len-1; j++) scanf("%I64d",&curr);
        scanf("%I64d\n",&c);
        (a+b>c) ? printf("-1\n"):printf("1 2 %ld\n",len);
    }
    return 0;
}


#include<stdio.h>
void ami(int array[],int n)
{
    int l=0;
        for(int j=3; j<=n; j++){
            if(array[1]+array[2]<=array[j]){
                printf("1 2 %d\n",j);
                 l++;
                break;
            }
        }
       if(l==0){
            printf("-1\n");
        }
}
int main()
{
    int x;
    scanf("%d",&x);
    int n,i;
    for(i=0; i<x; i++){
        scanf("%d",&n);
        int array[n];
        for(int j=1; j<=n; j++){
            scanf("%d",&array[j]);
        }
    ami(array,n);
    }
    return 0;
}


#include <stdio.h>
int main()
{
	int n, l;
	scanf("%d", &n);
	for(int i=0; i<n; i++)
	{
		scanf("%d", &l);
		long long int a[l];
		int x=0, y=1, z=0;
		for(int j=0; j<l; j++)
		{
			scanf("%lld", &a[j]);
		    if(j>1 && z==0)
		    z=j;
		    if((a[0]+a[1])<=a[z])
		    continue;
		    else
		    z=0;
		}
		if(z==0)
		printf("-1\n");
		else
		printf("%d %d %d\n", x+1, y+1, z+1);

	}
	return 0;
}


#include <stdio.h>
int main()
{
	int n, l;
	scanf("%d", &n);
	for(int i=0; i<n; i++)
	{
		scanf("%d", &l);
		long long int a[l];
		int x=0, y=1, z=0;
		for(int j=0; j<l; j++)
		{
			scanf("%lld", &a[j]);
		    if(j>1 && z==0)
		    z=j;
		    if((a[0]+a[1])<a[z])
		    continue;
		    else
		    z=0;
		}
		if(z==0)
		printf("-1\n");
		else
		printf("%d %d %d\n", x+1, y+1, z+1);

	}
	return 0;
}


#include <stdio.h>
#include <string.h>
int main()
{
    //�p�G����ۥ[�p��ε���ĤT��hprintf�o�T�檺��
    int test;
    scanf("%d",&test);
    while(test--)
    {
        int num;
        scanf("%d",&num);
        int i;
        int array[50000];
        int sum=0;
        for(i=0;i<num;i++)
        {
            scanf("%d",&array[i]);
        }
        int flag=0;
        sum=array[0]+array[1];
        for(i=2;i<num;i++)
        {
            if(array[i]>=sum)
            {
                printf("1 2 %d\n",i+1);
                flag=1;
                break;
            }
        }
        if(flag==0)
        {
            printf("-1\n");
        }

    }
}


#include <stdio.h>
#include <string.h>
int main()
{
    //�p�G����ۥ[�p��ε���ĤT��hprintf�o�T�檺��
    int test;
    scanf("%d",&test);
    while(test--)
    {
        int num;
        scanf("%d",&num);
        int i,j,k;
        int array[num];
        for(i=0;i<num;i++)
        {
            scanf("%d",&array[i]);
        }
        int flag=0;
        for(i=0;i<num-2;i++)
        {
            for(j=i+1;j<num-1;j++)
            {
                for(k=i+1;k<num;k++)
                {
                    if(array[i]+array[j]<=array[k]||array[i]+array[k]<=array[j]||array[j]+array[k]<=array[i])
                    {
                        printf("%d %d %d\n",i+1,j+1,k+1);
                        flag=1;
                        break;
                    }
                    if(flag==1)
                        break;
                }
                if(flag==1)
                    break;
            }
            if(flag==1)
                break;
        }
        if(flag==0)
        printf("-1\n");
    }
}


#include<stdio.h>
#include<stdlib.h>

void main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int n;
        scanf("%d",&n);
        int arr[n];
        for(int i=0;i<n;i++){
            scanf("%d",&arr[i]);
        }
	    int l=0;
        for(int j=2; j<n; j++){
            if(arr[0]+arr[1]<=arr[j]){
                printf("1 2 %d\n",j+1);
                 l++;
                break;
            }
        }
       if(l==0){
            printf("-1\n");
        }

    }
    return 0;
}


#include<stdio.h>
#include<stdlib.h>

void main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int n, i, j, k;
        scanf("%d",&n);
        int arr[n];
        for(i=0;i<n;i++){
            scanf("%d",&arr[i]);
        }
	    int flag=0;
        for(i=0;i<n-2;i++){
            for(j=i+1;j<n-1;j++){
                for(k=j+1;k<n;k++){
                    if(arr[i]+arr[j]<arr[k]){
                        flag=1;
                        break;
                    }
                }
                if(flag==1)
                    break;
            }
            if(flag==1)
                    break;
        }
        if(flag==0)
            printf("%d\n",-1);
        else
            printf("%d %d %d\n",i+1, j+1, k+1);
    }
    return 0;
}


#include<stdio.h>
#include<stdlib.h>

void main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int n, i, j, k;
        scanf("%d",&n);
        int arr[n];
        for(i=0;i<n;i++){
            scanf("%d",&arr[i]);
        }

        if(arr[0]+arr[1]<arr[n])
            printf("%d\n",-1);
        else
            printf("%d %d %d\n",1, 2, n);
    }
    return 0;
}


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
/*{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int i,p=0,count;
        char a[101];
        scanf("%s",a);
        while(1)
        {
            count=p;
            for(i=0;i<strlen(a)-1;i++)
            {
                j=i+1;
                while(a[j]==-1)
                    j++;
                if(a[i]!=a[j])
                {
                    a[i]=-1;
                    a[j]=-1;
                    p++;
                }
            }
            if(count==p)
                break;
        }
        if(p%2==0)
            printf("NET\n");
        else
            printf("DA\n");
    }

    return 0;
}*/
{
    unsigned long long t;
    scanf("%llu",&t);
    while(t--)
    {
        int flag=0;
        unsigned long long n,i,c,sum=0;
        scanf("%llu",&n);
         unsigned long long a[n];
        for(i=0;i<n;i++)
        {
            scanf("%llu",&a[i]);
        }
         for(i=2;i<n;i++)
        {
            if(a[0]+a[1]<=a[i])
            {
                c=i;
                flag=1;
                break;
            }
        }
         //printf("%lld\n",c);
        if(flag==0)
            printf("-1\n");
        else
            printf("1 2 %d\n",c+1);

    }
}


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
/*{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int i,p=0,count;
        char a[101];
        scanf("%s",a);
        while(1)
        {
            count=p;
            for(i=0;i<strlen(a)-1;i++)
            {
                j=i+1;
                while(a[j]==-1)
                    j++;
                if(a[i]!=a[j])
                {
                    a[i]=-1;
                    a[j]=-1;
                    p++;
                }
            }
            if(count==p)
                break;
        }
        if(p%2==0)
            printf("NET\n");
        else
            printf("DA\n");
    }

    return 0;
}*/
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int flag=0;
        long long int n,i,c,sum=0;
        scanf("%lld",&n);
        long long int a[n];
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
         for(i=2;i<n;i++)
        {
            if(a[0]+a[1]<a[i])
            {
                c=i;
                flag=1;
                break;
            }
        }
         //printf("%lld\n",c);
        if(flag==0)
            printf("-1\n");
        else
            printf("1 2 %d\n",c+1);

    }
}


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
/*{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int i,p=0,count;
        char a[101];
        scanf("%s",a);
        while(1)
        {
            count=p;
            for(i=0;i<strlen(a)-1;i++)
            {
                j=i+1;
                while(a[j]==-1)
                    j++;
                if(a[i]!=a[j])
                {
                    a[i]=-1;
                    a[j]=-1;
                    p++;
                }
            }
            if(count==p)
                break;
        }
        if(p%2==0)
            printf("NET\n");
        else
            printf("DA\n");
    }

    return 0;
}*/
{
    unsigned long long t;
    scanf("%llu",&t);
    while(t--)
    {
        int flag=0;
        unsigned long long n,i,c,sum=0;
        scanf("%llu",&n);
        long long int a[n];
        for(i=0;i<n;i++)
        {
            scanf("%llu",&a[i]);
        }
         for(i=2;i<n;i++)
        {
            if(a[0]+a[1]<a[i])
            {
                c=i;
                flag=1;
                break;
            }
        }
         //printf("%lld\n",c);
        if(flag==0)
            printf("-1\n");
        else
            printf("1 2 %d\n",c+1);

    }
}


#include <assert.h>
#include <ctype.h>
#include <limits.h>
#include <math.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<strings.h>
#include<stdio.h>
typedef long long int ll;
int main() {
	ll i,large,t,n,a;
	ll *arr;
	scanf("%lld",&t);
	while(t--) {
		scanf("%lld",&n);
		arr=(ll *)calloc(n,sizeof(ll));
		large=0;
		for(i=0;i<n;i++) {
			scanf("%lld",&arr[i]);
		}
		if(arr[0]+arr[1]<=arr[n-1]) {
			printf("1 2 %lld\n",n);
		}
		else{
			printf("-1\n");
		}

	}
	return 0;
}


#include<stdio.h>

int main()
{
    int t, n, i, ary[50002];
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d", &n);
        for(i=0; i<n; i++)
        {
           scanf("%d", &ary[i]);
        }
        //printf("%d %d %d\n", ary[0], ary[1], ary[n]);
         if(ary[0]+ary[1]<=ary[n-1])
         {
             printf("1 2 %d\n", n);
         }
         else
         {
             printf("-1\n");
         }
    }
    return 0;
}


#include<stdio.h>
#include<string.h>

int mxx(int x,int y){return (x>=y)?x:y;}
int mnn(int x,int y){return (x>=y)?y:x;}

const int nax = 4*10^5+3;

int pro(){
    int n,a[nax],s[nax];
    scanf("%d",&n);
    for(int i=0;i<n;i++) scanf("%d",&a[i]);
    if(a[0]+a[1]<=a[n-1]){
        printf("1 2 %d",n);
    }else
        printf("-1");

}

int main(){
    int T;

    scanf("%d",&T);

    for (int i = 1; i <= T; i++){
        pro();
        puts("");
    }

}


#include<stdio.h>
#include<string.h>

int mxx(int x,int y){return (x>=y)?x:y;}
int mnn(int x,int y){return (x>=y)?y:x;}

const int nax = 4*10^5+3;

int pro(){
    int n,a[nax];
    scanf("%d",&n);
    for(int i=0;i<n;i++) scanf("%d",&a[i]);
    if(a[0]+a[1]<=a[n-1]){
        printf("1 2 %d",n);
    }else
        printf("-1");

}

int main(){
    int T;

    scanf("%d",&T);

    for (int i = 1; i <= T; i++){
        pro();
        puts("");
    }

}


#include<stdio.h>
#include<string.h>

int mxx(int x,int y){return (x>=y)?x:y;}
int mnn(int x,int y){return (x>=y)?y:x;}

const int nax = 10^6+3;

int pro(){
    int n,a[nax];
    scanf("%d",&n);
    for(int i=0;i<n;i++) scanf("%d",&a[i]);
    if(a[0]+a[1]<=a[n-1]){
        printf("1 2 %d",n);
    }else
        printf("-1");

}

int main(){
    int T;

    scanf("%d",&T);

    for (int i = 1; i <= T; i++){
        pro();
        puts("");
    }

}


#include<stdio.h>
#include<string.h>

int mxx(int x,int y){return (x>=y)?x:y;}
int mnn(int x,int y){return (x>=y)?y:x;}

const int nax = 6*10^5+3;

int pro(){
    int n,a[nax],s[nax];
    scanf("%d",&n);
    for(int i=0;i<n;i++) scanf("%d",&a[i]);
    if(a[0]+a[1]<=a[n-1]){
        printf("1 2 %d",n);
    }else
        printf("-1");

}

int main(){
    int T;

    scanf("%d",&T);

    for (int i = 1; i <= T; i++){
        pro();
        puts("");
    }

}


#include<stdio.h>
#include<string.h>

int mxx(int x,int y){return (x>=y)?x:y;}
int mnn(int x,int y){return (x>=y)?y:x;}

const int nax = 2*10^6+3;

int pro(){
    int n,a[nax];
    scanf("%d",&n);
    for(int i=0;i<n;i++) scanf("%d",&a[i]);
    if(a[0]+a[1]<=a[n-1]){
        printf("1 2 %d",n);
    }else
        printf("-1");

}

int main(){
    int T;

    scanf("%d",&T);

    for (int i = 1; i <= T; i++){
        pro();
        puts("");
    }

}


#include<stdio.h>
#include<string.h>

int mxx(int x,int y){return (x>=y)?x:y;}
int mnn(int x,int y){return (x>=y)?y:x;}

const int nax = 1e5+10;
int n,a[nax];
int pro(){

    scanf("%d",&n);
    for(int i=0;i<n;i++) scanf("%d",&a[i]);
    if(a[0]+a[1]<=a[n-1]){
        printf("1 2 %d",n);
    }else
        printf("-1");

}

int main(){
    int T;

    scanf("%d",&T);

    for (int i = 1; i <= T; i++){
        pro();
        puts("");
    }

}


#include<stdio.h>
#include<string.h>

int mxx(int x,int y){return (x>=y)?x:y;}
int mnn(int x,int y){return (x>=y)?y:x;}

const int nax = 1e5+10;

int pro(){
    int n,a[nax];
    scanf("%d",&n);
    for(int i=0;i<n;i++) scanf("%d",&a[i]);
    if(a[0]+a[1]<=a[n-1]){
        printf("1 2 %d",n);
    }else
        printf("-1");

}

int main(){
    int T;

    scanf("%d",&T);

    for (int i = 1; i <= T; i++){
        pro();
        puts("");
    }

}


#include <stdio.h>
int a[50010];
int main(){
	int t,n,i;
	scanf("%d",&t);
	while(t--){
		scanf("%d",&n);
		for(i=1;i<=n;i++)scanf("%d",&a[i]);
		if(a[1]+a[2]<=a[n])printf("1 2 %d\n",n);//找最小的两个数a[1],a[2]，与最大的数a[n]进行比较。
		else printf("-1\n");
	}
	return 0;
}


#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
const int maxn=100000;
using namespace std;
int main()
{
    long long  t,n;
   long long a[maxn];
    cin>>t;
    while(t--)
    {
        cin>>n;
        for(int i=1;i<=n;i++)
               cin>>a[i];
            if(a[1]+a[2]<=a[n]||a[2]+a[n]<=a[1]||a[n]+a[1]<=a[2])
               {
                   cout<<1<<' '<<2<<' '<<n<<endl;}
            else if(a[1]+a[n-1]<=a[n]||a[1]+a[n]<=a[n-1]||a[n-1]+a[n]<=a[1])
                {cout<<1<<' '<<n-1<<' '<<n<<endl;}
            else{cout<<-1<<endl;}
    }return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5+10;
ll a[maxn];
int main()
{
    int t;scanf("%d",&t);
    while(t--)
    {
		int n;
		scanf("%d",&n);
		for(int i= 1;i<=n;++i)
        scanf("%lld",&a[i]);
        /*cin>>a[i]*/
		if(a[1]+a[2]>a[n])
        cout<<-1<<endl;
		else
		cout<<1<<' '<<2<<' '<<n<<endl;
    }
    return 0;
}


#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
const int maxn=100000;
using namespace std;
int main()
{
    long long  t,n;
   long long a[maxn];
    cin>>t;
    while(t--)
    {
        cin>>n;
        for(int i=1;i<=n;i++)
               cin>>a[i];
            if(a[1]+a[2]<=a[n]||a[2]+a[n]<=a[1]||a[n]+a[1]<=a[2])
               {
                   cout<<1<<' '<<2<<' '<<n<<endl;}
            else if(a[1]+a[n-1]<=a[n]||a[1]+a[n]<=a[n-1]||a[n-1]+a[n]<=a[1])
                {cout<<1<<' '<<n-1<<' '<<n<<endl;}
            else{cout<<-1<<endl;}
    }return 0;
}
1


#include<stdio.h>
#include<string.h>
int main()
{
    long long int t,n,i;
    scanf("%lld",&t);

    while(t--){
        scanf("%lld",&n);
      long long int a[n],sum=0;
        for(i=0;i<n;i++)
            scanf("%lld",&a[i]);
   if(a[0]+a[1]<=a[n-1])
    printf("%lld %lld %lld\n",1,2,n);
   else
        printf("-1\n");
        }
    return 0;
}


#include<stdio.h>
#include<string.h>
int main()
{
    long long int t,n,i;
    scanf("%lld",&t);

    while(t--){
        scanf("%lld",&n);
      long long int a[n];
        for(i=0;i<n;i++)
            scanf("%lld",&a[i]);
   if(a[0]+a[1]<=a[n-1])
    printf("1 2 %lld\n",n);
   else
        printf("-1\n");
        }
    return 0;
}


#include <stdio.h>
int a[50010];
int main(){
	int t,n,i;
	scanf("%d",&t);
	while(t--){
		scanf("%d",&n);
		for(i=1;i<=n;i++)scanf("%d",&a[i]);
		if(a[1]+a[2]<=a[n])printf("1 2 %d\n",n);
		else printf("-1\n");
	}
	return 0;
}


#include <stdio.h>

int main(void)
{

   int t;
   scanf("%d",&t);

   while(t--){

     int n,i;
     scanf("%d",&n);

     int *arr=(int *)malloc(n*sizeof(int));

     for(i=0;i<n;i++){
        scanf("%d",&arr[i]);
     }
      int count=0;

         if(arr[i]+arr[i+1]<=arr[n-1]){
            printf("%d %d %d\n",i+1,i+2,n);
            count++;
            break;

            }

      if(count==0)
        printf("-1\n");

   }

  return 0;
}


#include <stdio.h>

int main(void)
{

   int t;
   scanf("%d",&t);

   while(t--){

     int n,i;
     scanf("%d",&n);

     int *arr=(int *)malloc(n*sizeof(int));

     for(i=0;i<n;i++){
        scanf("%d",&arr[i]);
     }
      int count=0;
          if(n>3){
         if(arr[0]+arr[1]<=arr[n-1]){
            printf("%d %d %d\n",1,2,n);

            break;}

            }

      if(n<3)
        printf("-1\n");

   }

  return 0;
}


#include <stdio.h>

int main(void)
{

   int t;
   scanf("%d",&t);

   while(t--){

     int n,i;
     scanf("%d",&n);

     int *arr=(int *)malloc(n*sizeof(int));

     for(i=0;i<n;i++){
        scanf("%d",&arr[i]);
     }
      int count=0;
          if(n>=3){
         if(arr[i]+arr[i+1]<=arr[n-1]){
            printf("%d %d %d\n",i+1,i+2,n);
            count++;
            break;}

            }

      if(count==0 || n<3)
        printf("-1\n");

   }

  return 0;
}


#include <stdio.h>

int main(void)
{

   int t;
   scanf("%d",&t);

   while(t--){

     int n,i;
     scanf("%d",&n);

     int *arr=(int *)malloc(n*sizeof(int));

     for(i=0;i<n;i++){
        scanf("%d",&arr[i]);
     }
      int count=0;
          if(n>=3){
         if(arr[0]+arr[1]<=arr[n-1]){
            printf("%d %d %d\n",1,2,n);

            break;}

            }

      if(n<3)
        printf("-1\n");

   }

  return 0;
}


#include <stdio.h>

int main(void)
{

   int t;
   scanf("%d",&t);

   while(t--){

     int n,i;
     scanf("%d",&n);

     int *arr=(int *)malloc(n*sizeof(int));

     for(i=0;i<n;i++){
        scanf("%d",&arr[i]);
     }
      int count=0;
          if(n>=3){
         if(arr[i]+arr[i+1]<=arr[n-1]){
            printf("%d %d %d\n",i+1,i+2,n);
            count++;
            break;}

            }

      if(count==0)
        printf("-1\n");

   }

  return 0;
}


#include <stdio.h>

int main(void)
{

   int t;
   scanf("%d",&t);

   while(t--){

     int n,i;
     scanf("%d",&n);

     int *arr=(int *)malloc(n*sizeof(int));

     for(i=0;i<n;i++){
        scanf("%d",&arr[i]);
     }
      int count=0;
      for(int i=0;i+2<n;i++){
         if(arr[i]+arr[i+1]<=arr[n-1]){
            printf("%d %d %d\n",i+1,i+2,n);
            count++;
            break;

            }

      }
      if(count==0)
        printf("-1\n");

   }

  return 0;
}


#include <stdio.h>

int main(void)
{

   int t;
   scanf("%d",&t);

   while(t--){

     int n,i;
     scanf("%d",&n);

     int *arr=(int *)malloc(n*sizeof(int));

     for(i=0;i<n;i++){
        scanf("%d",&arr[i]);
     }

         if(arr[0]+arr[1]<=arr[n-1])
            printf("%d %d %d\n",1,2,n);

            else
                 printf("-1\n");

   }

  return 0;
}


#include <bits/stdc++.h>
    #include <math.h>

    using namespace std;
    typedef long long ll;
    typedef unsigned long long ull;
    # define M_PI  3.14159265358979323846

    const int M=1e9+7;
    long long mod(long long x){
        return ((x%M + M)%M);
    }
    long long add(long long a, long long b){
        return mod(mod(a)+mod(b));
    }

    void solve(){
        int n;
        cin>>n;
        vector<int>a(n);
        for(int i=0;i<n;i++)
            cin>>a[i];
        for(int i=0;i+2<n;i++){
            if(a[i]+a[i+1]<=a[n-1]){
                cout<<i+1<<" "<<i+2<<" "<<n<<"\n";
                return;
            }
        }
        cout<<-1<<"\n";
        return;
    }
    int main(){
        ios::sync_with_stdio(0);
        cin.tie(0);
        cout.tie(0);
        cout<<fixed;
        cout<<setprecision(10);
//        freopen("timber_input.txt", "r", stdin);
//        freopen("timber_output.txt", "w", stdout);
        int t=1;
        cin>>t;
        for(int i=1;i<=t;i++){
//            cout<<"Case #"<<i<<": ";
            solve();
        }
        return 0;
    }


#include <stdio.h>

int main(void)
{

   int t;
   scanf("%d",&t);

   while(t--){

     int n,i;
     scanf("%d",&n);

     int *arr=(int *)malloc(n*sizeof(int));

     for(i=0;i<n;i++){
        scanf("%d",&arr[i]);
     }
      int count=0;

         if(arr[0]+arr[1]<=arr[n-1]){
            printf("%d %d %d\n",1,2,n);
            count++;
            break;

            }

      if(count==0)
        printf("-1\n");

   }

  return 0;
}


#include <stdio.h>

int main(void)
{

   int t;
   scanf("%d",&t);

   while(t--){

     int n,i;
     scanf("%d",&n);

     int *arr=(int *)malloc(n*sizeof(int));

     for(i=0;i<n;i++){
        scanf("%d",&arr[i]);
     }
      int count=0;
      for(i=0;i+2<n;i++){
         if(arr[i]+arr[i+1]<=arr[n-1]){
            printf("%d %d %d\n",i+1,i+2,n);
            count++;
            return;

            }

      }
      if(count==0)
        printf("-1\n");

   }

  return 0;
}


#include <stdio.h>

int main(void)
{

   int t;
   scanf("%d",&t);

   while(t--){

     int n,i;
     scanf("%d",&n);

     int *arr=(int *)malloc(n*sizeof(int));

     for(i=0;i<n;i++){
        scanf("%d",&arr[i]);
     }
      int count=0;
          if(n>=3){
         if(arr[0]+arr[1]<=arr[n-1]){
            printf("%d %d %d\n",1,2,n);
            count++;
            break;}

            }

      if(count==0 || n<3)
        printf("-1\n");

   }

  return 0;
}


#include<stdio.h>
int main(){
	int tc;
	scanf("%d",&tc);
	while(tc--){
		int n;
		scanf("%d",&n);
		long long int input[n];
		for(int i=0;i<n;i++)scanf("%lld",&input[i]);
		long long int min1=input[0],min2=input[1],max=input[n-1];

		if(min1+min2<max){
			printf("1 2 %d\n",n);
		}
		else printf("-1\n");
	}
	return 0;
}


#include<stdio.h>
int main(){
	int tc;
	scanf("%d",&tc);
	while(tc--){
		long long int n;
		scanf("%lld",&n);
		long long int input[n];
		for(int i=0;i<n;i++)scanf("%lld",&input[i]);
		long long int min1=input[0],min2=input[1],max=input[n-1];

		if(min1+min2<max){
			printf("1 2 %lld\n",n);
		}
		else printf("-1\n");
	}
	return 0;
}


#include<stdio.h>
int main(){
	int tc;
	scanf("%d",&tc);
	while(tc--){
		long long int n;
		scanf("%lld",&n);
		long long int input[n];
		for(int i=0;i<n;i++)scanf("%lld",&input[i]);
		long long int min1=input[0],min2=input[1],max=input[n-1];

		if(min1+min2<=max){
			printf("1 2 %lld\n",n);
		}
		else printf("-1\n");
	}
	return 0;
}


#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int n,i,d=0,j,k;
		scanf("%d",&n);
		int a[n];
		for(i=0;i<n;i++)
		{
			scanf("%d",&a[i]);
		}
		for(i=2;i<n;i++)
		{
			for(j=1;j<i;j++)
			{
				for(k=0;k<j;k++)
				{
				if(a[k]+a[j]<=a[i])
				{
				if((a[i]-a[j]>=a[k])||(a[i]-a[k]>=a[j]))
						d=1;break;}
				else break;
				}

				if(d)
					break;
			}
			if(d)
					break;
		}
		if(d!=1)
		printf("-1\n");
		else
		printf("%d %d %d\n",k+1,j+1,i+1);
	}
	return 0;
}


#include<stdio.h>
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int n,i,d=0,j,k;
		scanf("%d",&n);
		int a[n];
		for(i=0;i<n;i++)
		{
			scanf("%d",&a[i]);
		}
		for(i=2;i<n;i++)
		{
			for(j=1;j<i;j++)
			{
				for(k=0;k<j;k++)
				{
				if(a[k]+a[j]<=a[i])
				{
				if((a[i]-a[j]>=a[k])||(a[i]-a[k]>=a[j]))
						d=1;break;}
				else break;
				}

				if(d)
					break;
			}
			if(d)
					break;
		}
		if(d!=1)
		printf("-1\n");
		else
		printf("%d %d %d\n",k+1,j+1,i+1);
	}
	return 0;
}


#include<stdio.h>
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int n,i;
		scanf("%d",&n);
		int a[n];
		for(i=0;i<n;i++)
		scanf("%d",&a[n]);
		if(a[0]+a[1]<=a[n-1])
		printf("1 2 %d\n",n);
		else printf("-1\n") ;
	}
	return 0;
}


#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int n,i,d=0,j,k;
		scanf("%d",&n);
		int a[n];
		for(i=0;i<n;i++)
		{
			scanf("%d",&a[i]);
		}
		for(i=2;i<n;i++)
		{
			for(j=1;j<i;j++)
			{
				for(k=0;k<j;k++)
				{
				if((a[k]+a[j]>a[i])&&(a[i]-a[j]<a[k])&&(a[i]-a[k]<a[j]))
						d=1;
				if(d)
					{
					printf("%d %d %d\n",k,j,i);
					break;
				}
				}
				if(d)
					break;
			}
			if(d)
					break;
		}
		if(d!=1)
		printf("-1\n");
	}
	return 0;
}


#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int n,i,d=0,j,k;
		scanf("%d",&n);
		int a[n];
		for(i=0;i<n;i++)
		{
			scanf("%d",&a[i]);
		}
		for(i=2;i<n;i++)
		{
			for(j=1;j<i;j++)
			{
				for(k=0;k<j;k++)
				{
				if((a[k]+a[j]<=a[i])||(a[i]-a[j]>=a[k])||(a[i]-a[k]>=a[j]))
						d=1;
				if(d)
					{
					printf("%d %d %d\n",k+1,j+1,i+1);
					break;
				}
				}
				if(d)
					break;
			}
			if(d)
					break;
		}
		if(d!=1)
		printf("-1\n");
	}
	return 0;
}


#include<stdio.h>
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int n,i;
		scanf("%d",&n);
		int a[n];
		if(a[0]+a[1]<=a[n-1])
		printf("1 2 %d\n",n);
		else printf("-1\n") ;
	}
	return 0;
}


#include<stdio.h>
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int n,i;
		scanf("%d",&n);
		int a[n];
		for(i=0;i<n;i++)
		scanf("%d",&a[i]);
		if(a[0]+a[1]<=a[n-1])
		printf("1 2 %d\n",n);
		else
		printf("-1\n") ;
	}
	return 0;
}


#include <stdio.h>

int main()
{
    int t,i,j,k,n,count;
    scanf("%d", &t);
    while(t--){
        count = 0;
        scanf("%d", &n);
        int arr[n];
        for(i=0;i<n;i++){
            scanf("%d", &arr[i]);
        }
        for(i=0;i<n-2;i++){
            for( j=i+1; j<n-1;j++){
                for(k=j+1;k<n;k++){
                    if(arr[i]+arr[j] <= arr[k]){
                        count++;
                        printf("%d %d %d\n", i+1, j+1, k+1);
                        break;
                    }
                    if(count>0){break;}
                }
                if(count>0){break;}
            }
        }

        if(count == 0){printf("-1\n");}

    }
    return 0;
}


#include <stdio.h>

int main()
{
    int t,i,n,count;
    scanf("%d", &t);
    while(t--){
        count = 0;
        scanf("%d", &n);
        int arr[n];
        for(i=0;i<n;i++){
            scanf("%d", &arr[i]);
        }
        for(i=2;i<n;i++){
            if(arr[0]+arr[1]<= arr[i]){
                    count++;
                    printf("%d %d %d\n", 1,2,i+1);
                    break;
                }
            }
        if(count==0){printf("-1\n");}
    }
    return 0;
}


#include<stdio.h>
#include<string.h>
void solve();
int main()
{
    int t;
    scanf("%d",&t);
    for(int i=0; i<t; i++)
    {
        solve();
    }
    return 0;
}
void solve()
{
    int s,i=-1,j=-1,k=-1,flag=0;
    scanf("%d",&s);
    int a[s];
    for(int i=0; i<s; i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=0; i<s-2; i++)
    {
        for(j=i+1; j<s-1; j++)
        {
            for(k=j+1; k<s; k++)
            {
                if(a[i]+a[j]<=a[k])
                {
                    flag=1;
                    break;
                }
            }
            if(flag==1)
            {
                break;
            }
        }
        if(flag==1)
        {
            break;
        }
    }
    if(flag==1)
    {
        printf("%d %d %d\n",i+1,j+1,k+1);
    }
    else
    {
        printf("%d\n",-1);
    }
}


#include<stdio.h>
#include<string.h>
void solve();
int main()
{
    int t;
    scanf("%d",&t);
    for(int i=0; i<t; i++)
    {
        solve();
    }
    return 0;
}
void solve()
{
    int s;
    scanf("%d",&s);
    int a[s];
    for(int i=0; i<s; i++)
    {
        scanf("%d",&a[i]);
    }
    if(a[0]+a[1]>a[s-1])
    {
        printf("%d\n",-1);
    }
    else
    {
        printf("%d %d %d\n",1,2,s);
    }
}


#include<stdio.h>

int main()
{
        long long int t, n, i, j, k, arr[100000];
        scanf("%lld", &t);
        while(t--){
                scanf("%lld", &n);
                for(i = 0; i < n; i++){
                        scanf("%lld", &arr[i]);
                }
                if(arr[0] + arr[1] < arr[n-1]){
                        printf("1 2 %lld\n",  n);
                } else {
                        printf("-1\n");
                }
        }
        return 0;
}


#include<stdio.h>

int main()
{
        long long int t, n, i, j, k, arr[100000];
        scanf("%lld", &t);
        while(t--){
                scanf("%lld", &n);
                for(i = 0; i < n; i++){
                        scanf("%lld", &arr[i]);
                }
                if(arr[0] + arr[1] <= arr[n-1]){
                        printf("1 2 %lld\n",  n);
                } else {
                        printf("-1\n");
                }
        }
        return 0;
}


#include<stdio.h>
int main()
{
    int i,j,k,n,t;
    scanf("%d",&n);
    for(k=0;k<n;k++){
        scanf("%d",&t);
        int array[t];
        for(i=0;i<t;i++)
            scanf("%d",&array[i]);
        if(array[t-1]>(array[0]+array[1]))
            printf("%d %d %d\n",1,2,t);
        else
            printf("-1\n");
    }
    return 0;
}


#include<stdio.h>
int main()
{
    int i,j,k,n,t;
    scanf("%d",&n);
    for(k=0;k<n;k++){
        scanf("%d",&t);
        int array[t];
        for(i=0;i<t;i++)
            scanf("%d",&array[i]);
        if(array[t-1]>=(array[0]+array[1]))
            printf("%d %d %d\n",1,2,t);
        else
            printf("-1\n");
    }
    return 0;
}


#include <stdio.h>
main()
{
	int t; scanf("%d",&t);
	while(t--)
	{
		int n,arr[400005],ko; scanf("%d",&n);
		for(int a=0; a<n ; a++)
			scanf("%d",&arr[a]);
		for(int a=0; a<n-2 ; a++)
		{
			if(arr[a]==arr[a+1] || arr[a+1]==arr[a+2] ) break;
			if((arr[a]+arr[a+1])<=arr[a+2]) {printf("1 2 3\n");goto jk;	}
		}
	printf("-1\n");jk:ko++;
	}
}


#include <stdio.h>
main()
{
	int t; scanf("%d",&t);
	while(t--)
	{
		int n,arr[400005],ko; scanf("%d",&n);
		for(int a=0; a<n ; a++)
			scanf("%d",&arr[a]);
		for(int a=0; a<n ; a++)
		{
			if((arr[0]+arr[1])<=arr[n-1]) {printf("1 2 %d\n",n);goto jk;	}
		}
	printf("-1\n");jk:ko++;
	}
}


#include <stdio.h>
main()
{
	int t; scanf("%d",&t);
	while(t--)
	{
		int n,arr[400005],ko; scanf("%d",&n);
		for(int a=0; a<n ; a++)
			scanf("%d",&arr[a]);
		for(int a=0; a<n-2 ; a++)
		{
			if((arr[a]+arr[a+1])<=arr[a+2]) {printf("1 2 %d\n",n);goto jk;	}
		}
	printf("-1\n");jk:ko++;
	}
}


#include <stdio.h>
#include <stdlib.h>
int cmpfunc (const void * a1, const void * b1)
 { return ( *(int*)a1 - *(int*)b1 ); }
main()
{
	int t; scanf("%d",&t);
	while(t--)
	{
		int n,arr[400005],ko; scanf("%d",&n);
		for(int a=0; a<n ; a++)
			scanf("%d",&arr[a]);
		qsort(arr,n,sizeof(int),cmpfunc);
		for(int a=0; a<n-2 ; a++)
		{
			if((arr[a]+arr[a+1])<=arr[a+2]) {printf("1 2 3\n");goto jk;	}
		}
	printf("-1\n");jk:ko++;
	}
}


#include <stdio.h>
main()
{
	int t; scanf("%d",&t);
	while(t--)
	{
		int n,arr[400005],ko; scanf("%d",&n);
		for(int a=0; a<n ; a++)
			scanf("%d",&arr[a]);
		for(int a=0; a<n ; a++)
		{
			if((arr[0]+arr[1])<=arr[n-1]) {printf("1 2 3\n");goto jk;	}
		}
	printf("-1\n");jk:ko++;
	}
}