#include <bits/stdc++.h>
using namespace std;
 
typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> pll;
typedef vector<ll> vl;
typedef vector<pll> vpl;
#define pb push_back
#define MAXN 200005
const ll N=32;
#define INF (ll)1e18
#define mod 1000000007
//#define mod 998244353
#define fi first
#define se second
#define mkp make_pair
#define clr(v) v.clear()
#define sze(x) ((ll)x.size())
#define all(v) v.begin(),v.end()
#define endl '\n'
#define level 20
ll timer,cc1,cc;

void boost()
{
 ios_base::sync_with_stdio(false);
 cin.tie(NULL);
}

ll a[MAXN],deg[MAXN];

ll par[MAXN];
set<pll,greater<pll>> ss[MAXN];

 
ll fp(ll i)
{
    if(par[par[i]]!=par[i])
    par[i]=fp(par[i]);
    
    return par[i];
}
 
void join(ll a,ll b)
{
    ll j,k;
    
    j=fp(a);
    k=fp(b);
    
    if(j==k)
    return;
    
    
    if(sze(ss[j])>=sze(ss[k]))
    swap(j,k);
    
    
    par[j]=k;
    for(auto x :ss[j])
    {
        ss[k].insert(x);
    }
    
    return;
}

int main()
{
 boost();
  
 ll i,t,q,l,r,ans,mid,c=0,j,z,tc,n,k;
 ll h,m,u,mm,w,x,y,l1,r1,d=0,mask,v,mx;
 ld f,f1;
 
 cin>>n>>m;
 vpl g;
 
 for(i=1;i<=n;i++)
 {
 cin>>a[i];
 par[i]=i;
 }
 
 priority_queue<pair<pll,ll>> pq;
 
 for(i=0;i<m;i++)
 {
     cin>>x>>y;
     deg[x]++;
     deg[y]++;
     
     if(fp(x)!=fp(y))
     join(x,y);
     
     else
     c++;
     
 }
 
 l=0;
 for(i=1;i<=n;i++)
 {
     if(deg[i]>a[i])
     {
         c++;
     }
     
     d+=a[i];
     l+=a[i]-deg[i];
 }
 
 z=(d/2);
 q=n-m-1;
 
 if((c>0)||(d&1)||(z!=(n-1))||(l!=(2*q)))
 cout<<-1<<endl;
 
 else
 {
     for(i=1;i<=n;i++)
     {
         l=fp(i);
         z=a[i]-deg[i];
         
         if(z>0)
         ss[l].insert(mkp(z,i));
     }
     
     for(i=1;i<=n;i++)
     {
         if(fp(i)==i)
         {
            if(sze(ss[i])>0)
            {
                auto p=*ss[i].begin();
                ss[i].erase(ss[i].begin());
                pq.push(mkp(p,i));
            }
         }
     }
     
     
     while(q--)
     {
         if(sze(pq)==0)
         {
         c++;
         break;
         }
         
         auto p1=pq.top();
         pq.pop();
         
         
         if(sze(pq)==0)
         {
         c++;
         break;
         }
         
         auto p2=pq.top();
         pq.pop();
         
         l=p1.se;
         r=p2.se;
         
         if(p1.fi.fi-1>0)
         ss[l].insert(mkp(p1.fi.fi-1,p1.fi.se));
         
         if(p2.fi.fi-1>0)
         ss[r].insert(mkp(p2.fi.fi-1,p2.fi.se));
         
         g.pb(mkp(p1.fi.se,p2.fi.se));
         
         join(l,r);
         y=fp(l);
         
         if(sze(ss[y])>0)
         {
             auto p=*ss[y].begin();
             ss[y].erase(ss[y].begin());
             pq.push(mkp(p,y));
         }
         
     }
     
     if(c>0||sze(pq)>0)
     cout<<-1<<endl;
     
     else
     {
         for(auto x :g)
         cout<<x.fi<<" "<<x.se<<endl;
     }
 }

return 0;
}