#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,fd[101010],ct[101010];
bool vis[101010];
pair<int,int>a[101010];
vector<pair<int,int> >v[101010];
vector<int>ans;
int dfs(int x)
{
	vis[x]=true;
	int cnt=ct[x];
	for(int i=0;i<v[x].size();i++)
	{
		if(vis[v[x][i].first]==true)
		{
			continue;
		}
		int z=dfs(v[x][i].first);
		if(z)
		{
			ans.push_back(v[x][i].second);
		}
		cnt^=z;
	}
	return cnt;
}
int main()
{
	cin>>n>>m;
	for(int i=0;i<n;i++)
	{
		cin>>a[i].first>>a[i].second;
	}
	sort(a,a+n);
	ct[0]=a[0].second;
	for(int i=1;i<n;i++)
	{
		ct[i]=a[i-1].second^a[i].second;
	}
	ct[n]=a[n-1].second;
	for(int i=0;i<n;i++)
	{
		fd[i]=a[i].first;
	}
	for(int i=0;i<m;i++)
	{
		cin>>x>>y;
		int aa=lower_bound(fd,fd+n,x)-fd;
		int bb=upper_bound(fd,fd+n,y)-fd;
		v[aa].push_back(make_pair(bb,i));
		v[bb].push_back(make_pair(aa,i));
	}
	for(int i=0;i<n;i++)
	{
		if(!vis[i])
		{
			if(dfs(i))
			{
				cout<<-1<<endl;
				return 0;
			}
		}
	}
	cout<<ans.size()<<endl;
	sort(ans.begin(),ans.end());
	for(int i=0;i<ans.size();i++)
	{
		cout<<ans[i]+1<<' ';
	}
	cout<<endl;
	return 0;
}