#include <bits/stdc++.h>
using namespace std;
#define int long long
#define eb emplace_back
#define mp make_pair
#define pb push_back
#define pp pop_back
#define endl '\n'
#define ff first
#define ss second
#define stop exit(0)
#define sz(x) (int)x.size()
#define pause system("pause")
#define all(x) (x).begin(), (x).end()
#define deb(x) cout << #x << "-" << x << endl
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
typedef string str;
typedef long long ll;
typedef __int128_t int128;
typedef vector<int> vii;
typedef pair<int, int> pii;
const long long INF = LLONG_MAX;
const int inf = INT_MAX;
const int mod = 998244353;
const int MOD = 1000000007;
const int dx[] = {-1,0,1,0};
const int dy[] = {0,1,0,-1};
const long double PI = 2 * acos(0.0);
const int N = 2e5+5;
inline void test_case() {
int n,m;
cin >> n >> m;
vii s(n+1,0);
for (int i = 1; i <= n; i++) {
cin >> s[i];
}
vector <pii> v;
for (int i = 1; i <= m; i++) {
int a,b;
cin >> a >> b;
if (s[a] > s[b]) swap(a,b);
v.eb(a,b);
}
sort(all(v),[&](pii a, pii b){
return max(s[a.ff],s[a.ss]) < max(s[b.ff],s[b.ss]);
});
vii id(n+1); iota(all(id),0);
sort(all(id),[&](int a,int b) {
return s[a] < s[b];
});
vii p(n+1,0);
vii sum(n+1,0);
for (int i = 1; i <= n; i++) p[i] = i, sum[i] = s[i];
function<int(int)> f = [&](int x) {
if (x == p[x]) return x;
return (p[x] = f(p[x]));
};
auto merge = [&](int a, int b) {
// cout << a << " " << b << endl;
a = f(a);
b = f(b);
if (a == b) return;
if (sum[a] < sum[b]) return;
// cout << a << " --- " << b << endl;
p[b] = a;
sum[a] += sum[b];
};
for (auto [a,b]:v) {
merge(a,b);
}
int r = f(id[n]);
// deb(id[n]);
// deb(r);
for (int i = 1; i <= n; i++) cout << (p[i] == r);
cout << endl;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T = 1;
// cin >> T;
while (T--) test_case();
return 0;
}