#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
#define dd(x) cout<<#x<<" is "<<x<<endl;
#define dd2(x,y) cout<<#x<<" is "<<x<<" "<<#y<<" is "<<y<<endl;
typedef pair<int,int> pii;
const int N = 2e5+5;
int a[N], p[N], sum[N], dead[N];
int n;
struct edge{
int u,v,w;
};
bool cmp(edge a, edge b){
return a.w < b.w;
}
pii fs(int x){
if(p[x] == x) {
if(dead[x]) return {x,1};
else return {x,0};
}
auto[a,b] = fs(p[x]);
p[x] = a;
if(b) dead[x] = 1;
return {a, dead[x]};
}
void merge(int u, int v){
int gu = fs(u).first, gv = fs(v).first;
if(gu == gv) return;
if(sum[gv] < a[u]) dead[gv] = 1;
p[gv] = gu;
sum[gu] += sum[gv];
}
signed main(){
ios::sync_with_stdio(0); cin.tie(0);
int m; cin>>n>>m;
for(int i=1; i<=n; i++) cin>>a[i];
if(n == 1){
cout<<1;
return 0;
}
edge edges[m];
for(int i=0; i<m; i++){
int u,v; cin>>u>>v;
if(a[u] < a[v]) swap(u,v); //a[u] is larger
edges[i] = {u,v,a[u]};
}
sort(edges, edges+m, cmp);
for(int i=1; i<=n; i++){
p[i] = i, sum[i] = a[i];
}
for(int i=0; i<m; i++){
auto[u,v,w] = edges[i];
merge(u,v);
}
for(int i=1; i<=n; i++) fs(i);
for(int i=1; i<=n; i++) cout << ((dead[i]) ? 0 : 1);
return 0;
}