#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2e5+10;
int pa[N],sz[N],ret[N];
ll a[N],val[N];
vector<int> adj[N],cp[N],f[N];
vector<ll> cn;
int fd(ll x){return lower_bound(cn.begin(),cn.end(),x)-cn.begin();}
int root(int x){if(pa[x]==x) return x; return root(pa[x]);}
void merge(int u,int v){
if(root(u)==root(v)) return;
int ru=root(u),rv=root(v);
if(sz[ru]>sz[rv]) swap(ru,rv),swap(u,v);
pa[ru]=rv;
sz[rv]+=sz[ru];
val[rv]+=val[ru];
for(auto x:cp[ru]) cp[rv].push_back(x);
cp[ru].clear();
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n,m; cin>>n >>m;
for(int i=1;i<=n;i++) pa[i]=i,sz[i]=1;
for(int i=1;i<=n;i++){
cin>>a[i];
cn.push_back(a[i]);
cp[i].push_back(i);
val[i]=a[i];
}
for(int i=0;i<m;i++){
int u,v; cin>>u >>v;
adj[u].push_back(v);
adj[v].push_back(u);
}
sort(cn.begin(),cn.end());
cn.erase(unique(cn.begin(),cn.end()),cn.end());
for(int i=1;i<=n;i++) f[fd(a[i])].push_back(i);
int sz=cn.size();
for(int i=0;i<sz;i++){
for(auto u:f[i]){
for(auto v:adj[u]){
if(a[v]>a[u]) continue;
int ru=root(u),rv=root(v);
if(val[rv]<a[u]){
cp[rv].clear();
}
merge(u,v);
}
}
}
int rt=root(1);
for(auto x:cp[rt]) ret[x]=1;
for(int i=1;i<=n;i++) cout<<ret[i];
}