#include <bits/stdc++.h>

using namespace std;
#define ll long long
const int N=1e6+5;
int F[N];
bool vis[N];
vector< pair<int,int> >adj[N];
int cnt=0;
vector<int>ans;
int n;
int dfs(int u)
{
    int ret=F[u];
    vis[u]=1;
    for(auto P:adj[u])
    {
        int v=P.first,idx=P.second;
        if(!vis[v])
        {
            int t=dfs(v);
            if(t%2) ans.push_back(idx);
            ret+=t;
        }
    }
    return ret;
}
bool solve(bool f)
{
    F[n+1]=f;
    ans.clear();
    memset(vis,0,sizeof vis);
    bool valid=1;
    for(int i=1;i<=n;i++)
        if(!vis[i]&&dfs(i)%2)
            valid=0;
    return valid;
}
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    int m;cin>>n>>m;
    vector< int >val;
    map<int,bool>f;
    val.push_back(0);
    for(int i=0;i<n;i++)
    {
        int x;cin>>x;
        cin>>f[x];
        val.push_back(x);
    }
    sort(val.begin(),val.end());
    for(int i=1;i<=n;i++)
        F[i]=f[val[i-1]]^f[val[i]];
    for(int i=0;i<m;i++)
    {
        int l,r;cin>>l>>r;
        int u=lower_bound(val.begin(),val.end(),l)-val.begin();
        int v=upper_bound(val.begin(),val.end(),r)-val.begin();
        if(u==v) continue;
        adj[u].push_back({v,i});
        adj[v].push_back({u,i});

    }
    if(solve(0)||solve(1))
    {
        sort(ans.begin(),ans.end());
        cout<<(int)ans.size()<<endl;
        for(int i=0;i<(int)ans.size();i++)
        {
            if(i) cout<<" ";
            cout<<ans[i]+1;
        }
        cout<<endl;
        return 0;
    }
    puts("-1");
    return 0;
}
