#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
long long a[N],s[N],val[N];
int pa[N];
bool w[N];
vector<int> adj[N],con,f[N],c[N];
set<pair<int,int>> ni[N];
int fd(int x){return lower_bound(con.begin(),con.end(),x)-con.begin();}
int root(int x){if(pa[x]==x) return x; return root(pa[x]);}
void merge(int u,int v){
int ru=root(u),rv=root(v);
if(ru==rv) return;
if(ni[ru].size()>ni[rv].size()) swap(ru,rv),swap(u,v);
val[rv]+=val[ru];
for(auto x:ni[ru]) ni[rv].insert(x);
ni[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++) cin>>a[i],con.push_back(a[i]);
for(int i=1;i<=n;i++) pa[i]=i,val[i]=a[i];
sort(con.begin(),con.end());
con.erase(unique(con.begin(),con.end()),con.end());
for(int i=0;i<m;i++){
int u,v; cin>>u >>v;
adj[u].push_back(v);
adj[v].push_back(u);
if(a[u]<a[v]) ni[u].insert({a[v],v});
else ni[v].insert({a[u],u});
}
for(int i=1;i<=n;i++) w[i]=1,f[fd(a[i])].push_back(i);
int sz=con.size();
for(int i=0;i<sz;i++){
for(auto u:f[i]){
for(auto v:adj[u]){
if(a[v]<=a[u]) merge(u,v);
}
int ru=root(u);
while(!ni[ru].empty() && ni[ru].begin()->first<=con[i]){
ni[ru].erase(ni[ru].begin());
}
if(!ni[ru].empty() && val[ru]<ni[ru].begin()->first) w[ru]=0;
}
}
for(int i=1;i<=n;i++){
bool b=w[i];
int t=i;
while(t!=pa[t]) t=pa[t],b&=w[t];
cout<<b;
}
}