#include <stdio.h>
#include <stdlib.h>
#define Q_MAX 100000

int num[100000];
int map[1000000],next[1000000];
int end;
int head[100000];
int map2[1000000],next2[1000000];
int end2;
int head2[100000];
int min[100000],max[100000];
int used[100000];
int queue[Q_MAX];
int h,r;

void add(int a,int b)
{
    map[end] = b;
    next[end] = head[a];
    head[a] = end++;
}
void add2(int a,int b)
{
    map2[end2] = b;
    next2[end2] = head2[a];
    head2[a] = end2++;
}
void enqueue(int k)
{
    if(used[k])
    {
        return;
    }
    used[k] = 1;
    queue[r] = k;
    r = (r + 1) %  Q_MAX;
}
int pop(void)
{
    int t;
    t = queue[h];
    used[t] = 0;
    h = (h + 1) % Q_MAX;
    return t;   
}

int main(void)
{
    int i,j;
    int n,m;
    int a,b,c;
    int ans;
    scanf("%d%d",&n,&m);
    for(i = 0;i < n;i++)
    {
        head[i] = head2[i] = -1;
        max[i] = -10000;
        min[i] = 0xFFFFFFF;
        scanf("%d",&num[i]);
    }
    for(i = 0;i < m;i++)
    {
        scanf("%d%d%d",&a,&b,&c);
        a--;b--;
        if(c == 2)
        {
            add(a,b);add(b,a);
            add2(a,b);add2(b,a);
        }
        else
        {
            add(a,b);add2(b,a);
        }
    }
    min[0] = num[0];
    enqueue(0);
    while(h != r)
    {
        i = pop();
        for(a = head[i];a != -1;a = next[a])
        {
            j = map[a];
            if(min[j] > min[i])
            {
                min[j] = min[i];
                enqueue(j);
            }
            if(min[j] > num[j])
            {
                min[j] = num[j];
                enqueue(j);
            }
        }
    }
    max[n - 1] = num[n - 1];
    enqueue(n-1);
    while(h != r)
    {
        i = pop();
        for(a = head2[i];a != -1;a = next2[a])
        {
            j = map2[a];
            if(max[j] < max[i])
            {
                max[j] = max[i];
                enqueue(j);
            }
            if(max[j] < num[j])
            {
                max[j] = num[j];
                enqueue(j);
            }
        }
    }
    for(i = ans = 0;i < n;i++)
    {
        if(ans < max[i] - min[i])
            ans = max[i] - min[i];
    }
    printf("%d\n",ans);
    
    return 0;
}

/**************************************************************
	Problem: 2290
	User: admin
	Language: C
	Result: Accepted
	Time:305 ms
	Memory:19508 kb
****************************************************************/