using System;

namespace _2_prijatelji
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] s = Console.ReadLine().Split(' ');

            Int64 n = Convert.ToInt64(s[0]);
            Int64 m = Convert.ToInt64(s[1]);

            int[] barikedv = new int[n];
            for (int i = 0; i < n; i++)
            {
                barikedv[i] = Convert.ToInt32(Console.ReadLine());
            }

            Int64[] kapcsolatszam = new Int64[n];
            Int64[] jo = new Int64[n];
            Int64[] rossz = new Int64[n];

            for (int i = 0; i < n; i++)
            {
                jo[i] = 0;
                rossz[i] = 0;
            }

            Int64[][] kapcs = new Int64[m][];
            for (int i = 0; i < m; i++)
            {
                kapcs[i] = new Int64[2];

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

                for (int j = 0; j < 2; j++)
                {
                    kapcs[i][j] = Convert.ToInt64(h[j]);
                    kapcsolatszam[Convert.ToInt64(h[j]) - 1]++;
                }
            }

            /*for (int i = 0; i < n; i++)
            {
                Console.WriteLine(i + ". szemely " + kapcsolatszam[i] + "kapcsolattal");
            }*/

            Int64 max = 0;
            bool ok = true;
            while (ok)
            {
                int index = 0;
                Int64 maxp = 0;

                //Megkeresi a legtöbb pontot vivot
                //Kiovnja annak a kapcsolatait, a pontját hozzáadja egy maxhoz
                //Ez ismétlodik

                for (int i = 0; i < n; i++)
                {
                    if (maxp <= Math.Abs(kapcsolatszam[i] * barikedv[i]))
                    {
                        index = i;
                    }       
                }

                if (barikedv[index - 1] < 0)
                {
                    for (int i = 0; i < m; i++)
                    {
                        if ((kapcs[i][0] == index) || (kapcs[i][1] == index))
                        {
                            rossz[Convert.ToInt32(kapcs[i][0]) - 1]++;
                            rossz[Convert.ToInt32(kapcs[i][1]) - 1]++;

                            kapcsolatszam[Convert.ToInt32(kapcs[i][0]) - 1]--;
                            kapcsolatszam[Convert.ToInt32(kapcs[i][1]) - 1]--;
                        }
                    }
                }
                else
                {
                    for (int i = 0; i < m; i++)
                    {
                        if ((kapcs[i][0] == index) || (kapcs[i][1] == index))
                        {
                            jo[Convert.ToInt32(kapcs[i][0]) - 1]++;
                            jo[Convert.ToInt32(kapcs[i][1]) - 1]++;

                            kapcsolatszam[Convert.ToInt32(kapcs[i][0]) - 1]--;
                            kapcsolatszam[Convert.ToInt32(kapcs[i][1]) - 1]--;
                        }
                    }
                }

                bool ok0 = true;
                for (int i = 0; i < n; i++)
                {
                    if (kapcsolatszam[i] != 0)
                    {
                        ok0 = false;
                        break;
                    }
                }
                ok = !ok0;

                /*megkeressuk a maxot
                 *megnezzuk ez hol fordl elo
                 * nnna kivonjuk a baratsagokat, ahol kell, meg megnezzuk h ellengseg v barat kell
                 */

                //esetleg ha lesz energiam, megcsinalni, h ket maxnal jol valasszon ki egyet


            }

            /*for (int i = 0; i < n; i++)
            {
                Console.WriteLine(i + ". szemely " + kapcsolatszam[i] + " kapcsolattal");
            }*/

            for (int i = 0; i < n; i++)
            {
                max += barikedv[i] * (jo[i] - rossz[i]);

                //Console.WriteLine(barikedv[i] + " barikedv " + jo[i] + " pajti " + rossz[i] + " ellenseg");
            }

            Console.Write(max);
        }
    }
}